我有一些非 ASCII 字符要在 Swing JComboBox 中显示。然而,这些字符没有正确地显示出来,我看到很多奇怪的字符代替了非 ASCII 字符:
import javax.swing.*;
public class Test {
public static void main(String[] args) {
String[] choices = new String[]{"Good's","Bad’s","தமிழ்"};
for (String s : choices) System.out.println(s);
JComboBox choiceBox = new JComboBox(choices);
JFrame frame = new JFrame("Test");
frame.setSize(400, 400);
frame.add(choiceBox);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
(注意Bad's中略有不同的撇号,这是整个问题的起因。)
System.out.println
调用在我的终端上完美地显示了字符。
关于此问题,在SO上有很多问题,他们建议从GraphicsEnvironment列出字体,并仅选择声称能够显示我的字符的字体。不幸的是,这个技巧对我不起作用。
Font font = new Font("Ariel", Font.PLAIN, 12);
for (String s : choices) assert font.canDisplayUpTo(s) < 0;
choiceBox.setFont(font);
断言没有失败,但仍然显示乱码。
我使用的是OSX 10.6.5,Java(TM) SE Runtime Environment (build 1.6.0_22-b04-307-10M3261)。
Tahoma
,当我按照示例答案更改为Dialog
时--它起作用了。仅仅编码是不够的。 - will