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

Java JTextField中的希伯来文文本(Swing),java,swing,jtextfield,hebrew,Java,Swing,Jtextfield,Hebrew,当我在JTextField中执行类似fileText.setText(path)的操作时,除非文本是希伯来语(或结合了英语和希伯来语),否则效果很好。然后我得到这样的结果: 我尝试了不同的字体(甚至其中提到了“希伯来语”的字体),但都没有用。我怎么修理它 顺便说一下,它与ToolTipText(fileText.setToolTipText(path))一起工作正常 这是我的密码: // browse files or folders public void browse(JTextF

当我在
JTextField
中执行类似
fileText.setText(path)
的操作时,除非文本是希伯来语(或结合了英语和希伯来语),否则效果很好。然后我得到这样的结果:

我尝试了不同的字体(甚至其中提到了“希伯来语”的字体),但都没有用。我怎么修理它

顺便说一下,它与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);
                }
                }}
    }

不是答案,因为您的代码运行良好。请尽量保护您的环境

对我来说,它与Windows7上的默认字体完美地结合在一起。Java JDK1.8.0_31

public class JTextFieldExample extends JFrame {

    private static final long serialVersionUID = 1L;

    public JTextFieldExample() {
        super("TextField Test Demo");
        final Container container = getContentPane();
        final JTextField textField=new JTextField("hello \u05DD\u05D5\u05DC\u05E9 Hello \u05DD\u05D5\u05DC\u05E9"); 
        // optionally set RTL
        textField.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        container.add(textField);
        setSize(300,100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(final String args[]) {
        new JTextFieldExample();
    }
}
使用包含以下内容的JTextField创建窗口:

你好!你好!你好

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

我还尝试过在测试应用程序中编写代码,效果也很好。 也只有希伯来语,英语-希伯来语混合语效果很好

但是,您可能更喜欢将RTL方向设置为更好地匹配希伯来语,我猜在我的示例中,希伯来语字母的显示顺序与实际方向相反

请执行以下操作:

  • 检查JTextField在希伯来语中是否正常工作?如果是这样,那么文件选择器返回的路径中有一些奇怪的东西
  • 通过将路径撬动到控制台来检查路径。查找可能导致问题的字符,例如\-es或损坏的unicode代码点
  • 以十六进制转储字符串的字节。这可能会显示unicode字节排序标记或损坏的unicode代码点
    “我用了什么样的JDK?”我尝试了不同的字体(甚至字体中提到的“希伯来”)。“看。也许这个bug与你的情况有关:考虑提供一个演示你的问题的方法。这不是一个代码转储,而是您正在做的一个示例,它突出了您所遇到的问题。这将减少混乱和更好的响应。我仍然没有问题。请张贴一个正确的,包括确切的字符串路径,你给你的问题。添加您的JDK版本和操作系统的信息。我倾向于在顶部贴一条关于此类帖子的通知:“这还不是答案,而是一条包含大量代码和详细信息的注释”,以避免出现“没有答案”标志。答案是,Java 8和Windows 7无法重现此问题,因此,所讨论的原始代码运行良好。它不是答案,而是观察结果。您不指导OP如何修复或解决其当前问题。最后,你在回答中向OP提出了一个问题,这进一步使其作为回答无效。请看我的评论。这个问题无法重现,因此很难解决。我认为问题在于底层操作系统返回的路径,但这是一个假设。我尽力帮助解决这个问题,并给出了一些提示。建议解决方案的希伯来文输出是相反的,单独使用
    setComponentOrientation
    函数无法正常工作(请参阅此链接:),最好使用
    JTextField#setHorizontalAlignment