いくつかの機能を試すために、swingアプリケーションにを追加しましたKeyListener
。TextField
目標は、その中に入力されたすべてのキーに反応することTextField
です。ユーザーは数字だけを入力する必要がありますが、それがどのようになっているのか、アルファベット文字も入力できます。したがって、キーを入力した後は毎回チェックする必要があります。すべてが数字である場合は、その数字で何かを作成します。そうでない場合は、プログラムを終了せずにエラーがあることをユーザーに伝えます。だから私はこのようなことをしたい:
String enteredNumPlayers = "";
JTextField textfieldNumPlayers = new JTextField();
textfieldNumPlayers.setBounds(/*some values*/);
textfieldNumPlayers.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.DARK_GRAY));
textfieldNumPlayers.setHorizontalAlignment(JTextField.CENTER);
textfieldNumPlayers.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
if(e.getKeyChar()!=/*Code of the back key*/){
enteredNumPlayers += e.getKeyChar();
System.out.println(e);
}else{
enteredNumPlayers = enteredNumPlayers.substring(0, s1.length()-1);
}
try{
Integer.parseInt(enteredNumPlayers);
// do something with that number
}catch (NumberFormatException err){
new ErrorDialog("Not a number"); // my own method to allude user
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
}
});
System.out.println(e)
ここで、メソッド内で戻るキーの特定のコードを確認したかったのですkeyTyped(...)
が、次のように出力されます。
java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unbekannt keyCode: 0x0,keyChar=Rücktaste,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on (...)
すべてのキー値またはコード=0または不明なのはなぜですか?それはASCII値ではないでしょうか?「Rücktaste」を使用することも醜いでしょう。英語で動作するコンピューターでは、この値が異なるからです。では、入力したキーがバックキーであるかどうかをきれいに確認するにはどうすればよいですか?
keyCharが正しいことを除いて、他の文字でも同じことが起こります。