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 の 2 つのキーボード レイアウトがあります。それらを切り替えても、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 をサポートする多くの OS があり、おそらくそれぞれに独自の実装があります。

とはいえ、このリンクはあなたの質問に答えます。

また、適切なロケールをユーザーに決定させることもお勧めします。適切なロケールをプログラムで取得することは、特に Linux では非常に難しい場合があります。

于 2012-11-10T10:33:20.853 に答える