gpt4 book ai didi

java - 任何覆盖更多汉字的 JTextField 后代或替代者?

转载 作者:搜寻专家 更新时间:2023-11-01 03:33:22 24 4
gpt4 key购买 nike

我正在开发一个应用程序,它使用 JTextfield 对象作为文本输入组件。在一些测试中,我发现并不是所有的汉字都可以使用这个组件显示。乍一看这似乎很正常:有些汉字大到 Unicode 都无法覆盖,这(以我的愚见)解释了为什么它们不能复制到剪贴板(只能作为位图,这意味着字体修改可以'进行测试)。

但是,似乎还有一些字符,如四龙字符(在 URL Largest Chinese character in Unicode 中解释)可以复制到剪贴板,但似乎不被 JTextField 对象接受。

因此我的问题是:是否有 JTextField 的任何后代涵盖所有汉字,或者至少是 Unicode 中存在的汉字?或者有人知道另一个更强大的组件吗?

提前致谢

最佳答案

使用 JTextField 时,您需要指定一种可以支持您要使用的所有字符的字体。

如果你想支持大量的字符,这可能是不可能的。例如,字体MingLiU-ExtB支持𪚥等一些不常见的汉字,但不支持汉字等常见汉字。

Arial Unicode MSMingLiU 等字体支持常见字符,但不支持不常见字符。

因此,使用 JTextField 可能是不可能的。

但是,JTextPane 更灵活,至少在 Windows 上运行时是这样。如果它需要一些不在您指定的字体中的字符,它将添加来自其他后备字体的字符。 (我不知道它使用什么算法来选择其他字体。这种行为可能来自 Windows 本身,而不是来自 Java:参见 Font Fallback here 的讨论。)

这段代码给出了一些 JTextFieldJTextPane 的例子,带有一些字体。

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

关于java - 任何覆盖更多汉字的 JTextField 后代或替代者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40840115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com