为什么我不能在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:我想输入英文符号,但我只能输入俄文符号... 不能仅使用对话框文本字段
答案 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上的代码工作得很好