随着JTextField
你需要指定一个可以支持所有你想使用的字符的字体。
如果你想支持大量的字符,这可能是不可能的。例如,字体MingLiU-ExtB
支持一些罕见的中文字符,如
,但不支持普通中文字符如漢字
。
字体如Arial Unicode MS
或MingLiU
支持常用字符,但并不罕见。因此,JTextField
可能是不可能的。
但是,JTextPane
更灵活,至少在Windows上运行时是如此。如果它需要一些不在您指定的字体中的字符,它将添加来自其他备用字体的字符。 (我不知道它用什么算法来选择其他字体此行为可能是由Windows本身来,而不是从Java:见的Font Fallback here讨论)
该代码给出了JTextField
和JTextPane
几个例子与几个字体。
public class ChineseFont {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
String text = "test test 漢字.";
JTextField textField1 = new JTextField(text);
textField1.setFont(new Font("Arial Unicode MS", Font.PLAIN, 24));
JLabel label1 = new JLabel("JTextField " + textField1.getFont().getFontName());
JTextField textField2 = new JTextField(text);
textField2.setFont(new Font("MingLiU", Font.PLAIN, 24));
JLabel label2 = new JLabel("JTextField " + textField2.getFont().getFontName());
JTextField textField3 = new JTextField(text);
textField3.setFont(new Font("MingLiU-ExtB", Font.PLAIN, 24));
JLabel label3 = new JLabel("JTextField " + textField3.getFont().getFontName());
JTextPane textPane4 = new JTextPane();
textPane4.setFont(new Font("Arial Unicode MS", Font.PLAIN, 24));
textPane4.setText(text);
JLabel label4 = new JLabel("JTextPane " + textPane4.getFont().getName());
JTextPane textPane5 = new JTextPane();
textPane5.setFont(new Font("MingLiU", Font.PLAIN, 24));
textPane5.setText(text);
JLabel label5 = new JLabel("JTextPane " + textPane5.getFont().getName());
JFrame frame = new JFrame();
Container contentPane = frame.getContentPane();
contentPane.setLayout(new GridLayout(5, 2, 2, 6));
contentPane.add(label1);
contentPane.add(textField1);
contentPane.add(label2);
contentPane.add(textField2);
contentPane.add(label3);
contentPane.add(textField3);
contentPane.add(label4);
contentPane.add(textPane4);
contentPane.add(label5);
contentPane.add(textPane5);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
});
}
}
您也可以手动使用AttributedText
文本的每个部分指定的字体。请参阅this answer
你能提供一个你的问题的例子吗?意思是适合的字符串,而不适合的字符串。另外,你确定你正在使用正确的编码?请提供一个[mcve]给我们来测试这个。 – AxelH
我想添加一个中文句子的例子,它被我使用的JTextField所接受,但似乎我只能使用图像作为附件,包含句子的RTF文件不被接受(并且简单的复制/中文字符的粘贴在这个评论窗口中不起作用,但是我确定大量的中文字符被接受,而只有最大的中文字符出现问题(如超链接中的那个)。 – Dominique
通常情况下,问题不在于JTextField本身,但是使用的是你正在使用的字体。你需要找到一个可以显示你想要的字符的字体。我通常使用'Arial Unicode MS',它可以显示大多数Unicode字符,但它不能显示'四条龙'字符 – Enwired