无法在jTextField中更改输入语言

时间:2014-10-24 15:47:58

标签: java swing jtextfield

为什么我不能在jtextfield和JOptionPane.showInputDialog()中切换输入语言? 在我的计算机上,我可以,但在其他计算机上,我只能编写系统区域设置语言符号。

Ctrl + Shift Ctrl + Alt + Shift 无法正常工作在应用程序中,但当应用程序没有焦点时它正在工作

Locale.setDefault(Locale.ENGLISH); //tried it
System.setProperty("user.language", "en"); // and it

private void showPasswordWindow() {

    String pass = JOptionPane.showInputDialog(null, "Enter password", "Secure", JOptionPane.WARNING_MESSAGE);
    if (pass == null)
        System.exit(0);
    if (!pass.contains("somepassword"))
        showPasswordWindow();
}

不工作((密码包含英文符号,我无法输入密码(只有俄罗斯符号可用)

JRE 8; PS:我想输入英文符号,但我只能输入俄文符号... 不能仅使用对话框文本字段

3 个答案:

答案 0 :(得分:0)

您应该更改Locale

textField.getInputContext().selectInputMethod(Locale.ENGLISH);

修改

也许这不是最佳选择,但您可以尝试覆盖DocumentFilter的默认JtextField并更改编码:

class EnglishTextField extends JTextField {

    public EnglishTextField() {
        ((AbstractDocument)getDocument()).setDocumentFilter(new DocumentFilter(){
            @Override
            public void insertString(DocumentFilter.FilterBypass fb, int offset,
                    String text, AttributeSet attr) throws BadLocationException {
                try {
                    //TODO change to your current encoding
                    byte[] bytes = text.getBytes("ISO-8859-1"); 
                    fb.insertString(offset, new String(bytes, "UTF-8"), attr);
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

答案 1 :(得分:0)

这里有两个问题。

第一个是输入符号。这不是一个Java问题,而是installing a different language for the keyboard的问题。

第二个问题是显示外语符号。您可能需要使用UTF字体来显示否则无法正确显示的字符

答案 2 :(得分:0)

最后......我做了O_O

frame.setVisible(true);

解决了这个问题,但我无法理解为什么?? ..

P.S。没有我的comp app上的代码工作得很好