JTextField中的希伯来语文本(Swing)

use*_*179 5 java swing jtextfield hebrew

当我这样做fileText.setText(path)JTextField,它工作得很好,除非文字是希伯来文(或结合英语和希伯来语).然后我得到这样的东西:

在此输入图像描述

我尝试了不同的字体(甚至在其中提到了"希伯来语"的字体),但它没有帮助.我如何解决它?

顺便说一下,它与ToolTipText(fileText.setToolTipText(path))正常工作

这是我的代码:

// browse files or folders
    public void browse(JTextField txtField) {

        JFileChooser fileChooser = new JFileChooser();

        fileChooser.setCurrentDirectory(new File(System.getProperty("user.home")));     

        fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

        int result = fileChooser.showOpenDialog(this);

        if (result == JFileChooser.APPROVE_OPTION) {
            File selectedDir = fileChooser.getSelectedFile();
            String path = selectedDir.getAbsolutePath();

            if (txtField == srcText) {
                srcText.setText(path); 
                srcText.setToolTipText(path); 
            }
            else {
                if (txtField == dstText) {
                    dstText.setText(path); 
                    dstText.setToolTipText(path);
                }
                }}
    }
Run Code Online (Sandbox Code Playgroud)

Gee*_*Bee 2

不是答案,因为您的代码按原样运行良好。请尝试您的环境。

\n\n

对我来说,它可以在 Windows 7 上使用默认字体完美地开箱即用。 Java JDK1.8.0_31

\n\n
public class JTextFieldExample extends JFrame {\n\n    private static final long serialVersionUID = 1L;\n\n    public JTextFieldExample() {\n        super("TextField Test Demo");\n        final Container container = getContentPane();\n        final JTextField textField=new JTextField("hello \\u05DD\\u05D5\\u05DC\\u05E9 Hello \\u05DD\\u05D5\\u05DC\\u05E9"); \n        // optionally set RTL\n        textField.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);\n        container.add(textField);\n        setSize(300,100);\n        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n        setVisible(true);\n    }\n\n    public static void main(final String args[]) {\n        new JTextFieldExample();\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

创建一个带有 JTextField 的窗口,其中包含:

\n\n
\n

你好\xd7\x9d\xd7\x95\xd7\x9c\xd7\xa9 你好\xd7\x9d\xd7\x95\xd7\x9c\xd7\xa9

\n
\n\n

(如果我在希伯来语中使用了一些奇怪或冒犯性的东西,我很抱歉。我刚刚从另一个页面复制了 unicode 字符,他们声称这意味着“你好”)。

\n\n

我还在测试应用程序中尝试过您的代码,效果也很好。\n此外,仅希伯来语、英语-希伯来语混合也运行良好。

\n\n

但是,您可能更喜欢设置 RTL 方向以更好地匹配希伯来语,我想在我的示例中,希伯来语字母以相反的顺序显示,而不考虑实际方向。

\n\n

请执行下列操作:

\n\n
    \n
  • 检查 JTextField 在希伯来语中是否正常工作?如果是这样,那么文件选择器返回的路径中有一些奇怪的东西
  • \n
  • 通过将其打印到控制台来检查路径。找到可能导致问题的字符,例如 \\-es 或损坏的 unicode 代码点
  • \n
  • 以十六进制转储字符串的字节。这可以揭示例如 unicode 字节排序标记或损坏的 unicode 代码点。
  • \n
\n