我在显示正确构成主要字母的重音/修饰符时显示泰语和缅甸语字符时出现问题。
在下面的示例程序中,两个序列\ u100a \ u103a和\ u0e27 \ u0e31应该每个都呈现为单个字形,但在Mac上它们看起来会分解为两个字符。
import javax.swing.*;
import java.awt.*;
public class Test
{
public static final String TEXT = "\u100a\u103a \u0e27\u0e31";
public static void main(String[] args)
{
System.out.println(System.getProperty("java.vm.name")+" "+System.getProperty("java.version"));
System.out.println(System.getProperty("os.name")+" "+System.getProperty("os.version")+" "+System.getProperty("os.arch"));
System.out.println("TEXT is "+TEXT);
JFrame f = new JFrame("Title "+TEXT);
JLabel label = new JLabel("Label "+TEXT);
JTextField text = new JTextField("Text "+TEXT);
text.setEditable(false);
JTextField text2 = new JTextField("Text "+TEXT);
text2.setFont(new Font("Arial Unicode MS", Font.PLAIN, 12));
text2.setEditable(false);
f.getContentPane().setLayout(new FlowLayout());
f.getContentPane().add(label);
f.getContentPane().add(text);
f.getContentPane().add(text2);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
}
结果输出
有趣的是,如果我将字体设置为等宽字体或ArialUnicodeMS,则泰语字符现在显示为单个字形,但缅甸字符仍显示为两个字符。两者都在窗口标题和终端窗口中正确显示,因此我知道Mac OS X本身具有正确的字体并知道如何渲染它们。
如何让它在我的Java应用程序中正确显示?