我正在尝试获取用户在JPasswordField中输入文本的语言环境。

为此,我正在做下一个:

final JPasswordField passwdField = new JpasswordField();
final InputContext it = InputContext.getInstance();
final JTextArea localeLng = new JTextArea();
...
...(some code)
...
passwdField.addKeyListener(new KeyAdapter() {
  @Override
  public void keyReleased(KeyEvent e) {
       localeLng.setText(it.getLocale().getLanguage().toUpperCase());
   }
});


我有两个键盘布局En和Ru。当我在它们之间切换时,它不会影响localeLng值。也许在带有JRE 7up7的Ubuntu上。
但这在Windows 7上完美运行。

那么,我的问题到底在哪里?



我的临时解决方案:)

public void keyReleased(KeyEvent e) {
    int key = (int)e.getKeyChar();
    if(key>122){
        localeLng.setText("!");
        localeLng.setBackground(Color.RED);
    } else {
        localeLng.setText("En");
        localeLng.setBackground(Color.BLUE);
    }
}

最佳答案

提醒您,使用Java可以得到一组定义明确的方法和类,但实现方式不同,可能有很多JVM,并且许多操作系统都提供了对Java的支持,也许每个都有自己的实现。

就是说,this link将回答您的问题。

我还建议让用户决定什么是正确的语言环境,以编程方式获取正确的语言环境确实很棘手,尤其是在Linux下。

09-26 19:54