作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试显示老挝语文本:
ຄິ້ງເຄັງສາຍພານ
在 JLabel
在 Java Swing 中使用从 following link 获得的示例代码.
选择的字体是 DokChampa。但是,显示的文本是:
请注意,字母上方的字符被移位并向右移动。但是,使用 DokChampa 字体在系统中的记事本或其他编辑器中输入的相同文本可以正确显示。
在 JTextField
中完成数据输入后也使用 Windows 支持的老挝语键盘,行为是相同的。
在 Java Swing 组件中尝试过的其他字体(如老 UI)也具有相同的行为
使用 JDK 1.8.0_152。我的示例程序如下。预期的输出是看到上面提到的显示的文本。
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
public class TestLaos {
public static void main(String[] args) {
SwingUtilities.invokeLater( new Runnable() {
public void run() {
JLabel l = new JLabel();
String [] lstr = GraphicsEnvironment.getLocalGraphicsEnvironment ().getAvailableFontFamilyNames();
Font [] fList = new Font [lstr.length];
for (int i = 0; i <lstr.length; i ++)
{
fList [i] = new Font (lstr [i], Font.PLAIN, 20);
}
String rawString = new String("ຄິ້ງເຄັງສາຍພານ");
l.setText(rawString);
Font f = l.getFont ();
if (f.canDisplayUpTo (rawString)!=-1)
{//Find fonts that can not be displayed, then find available fonts
for (int i = 0; i <fList.length; i ++)
{
if (fList [i] .canDisplayUpTo (rawString) ==-1 && fList [i].getFontName().startsWith("DokChampa"))
{
System.out.println("Using font " + fList [i].getFontName() + " to display " + rawString);
l.setFont (fList [i]);
break;
}
}
}
JOptionPane.showMessageDialog(null, l);
}
});
}
}
最佳答案
我有一个 Windows 10 操作系统。我正在使用 Oracle Java JDK 14.0.2 并编译为 Java 8 标准。
这是我的测试结果。
有些文字是正确的,有些则不是。我怀疑字体有问题。
这是我运行的代码。在您的系统上尝试一下,看看会发生什么。
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class TestLaos implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new TestLaos());
}
@Override
public void run() {
JFrame frame = new JFrame("Laos Fonts");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
String rawString = new String("ຄິ້ງເຄັງສາຍພານ");
List<Font> laosFonts = getLaosFonts(rawString);
frame.add(createMainPanel(laosFonts, rawString), BorderLayout.CENTER);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private JPanel createMainPanel(List<Font> laosFonts, String rawString) {
JPanel panel = new JPanel(new GridLayout(0, 2, 10, 10));
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
for (Font font : laosFonts) {
JLabel label1 = new JLabel(font.getFontName());
label1.setFont(label1.getFont().deriveFont(Font.PLAIN, 20f));
panel.add(label1);
JLabel label2 = new JLabel(rawString);
label2.setFont(font.deriveFont(Font.PLAIN, 20f));
panel.add(label2);
}
return panel;
}
private List<Font> getLaosFonts(String rawString) {
List<Font> laosFonts = new ArrayList<>();
Font[] list = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
for (Font font : list) {
if (font.canDisplayUpTo(rawString) == -1) {
laosFonts.add(font);
}
}
return laosFonts;
}
}
关于java - Java Swing 组件中老挝语文本的显示问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65456672/
我是一名优秀的程序员,十分优秀!