0

我正在尝试获取用户在 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);
    }
}
4

1 回答 1

1

提醒一下,使用 Java 可以获得一组定义良好的方法和类,但实现不同,这可能是一件好事,那里有许多 JVM 和许多提供对 Java 的支持的操作系统,可能每个都有自己的实现。

也就是说,此链接将回答您的问题。

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

于 2012-11-10T10:33:20.853 回答