我正在尝试显示老挝语文本:
ຄິ້ງເຄັງສາຍພານ
在一个 JLabel
在JavaSwing中使用从以下链接获得的示例代码。
选择的字体是dokchampa。但是,显示的文本是:
请注意,字母表上方的字符将被移位并向右移动。但是,在记事本或系统中使用dokchampa字体的其他编辑器中输入的相同文本将正确显示。
当数据输入在 JTextField
同样使用windows支持的lao键盘,行为也是相同的。
像laoui这样的其他字体在javaswing组件中也有相同的行为
使用jdk 1.8.0\u 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);
}
});
}
}
1条答案
按热度按时间tp5buhyn1#
我有一个windows10操作系统。我使用的是oraclejavajdk14.0.2,并编译为java8标准。
这是我的测试结果。
有些课文是正确的,有些是不正确的。我怀疑字体有问题。
这是我运行的代码。在你的系统上试试,看看会发生什么。