2

いくつかの機能を試すために、swingアプリケーションにを追加しましたKeyListenerTextField目標は、その中に入力されたすべてのキーに反応すること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が正しいことを除いて、他の文字でも同じことが起こります。

4

2 に答える 2

2

ユーザーが整数以外のものを押すたびに表示されるエラーメッセージがあるのは少し面倒だと思います。正規表現を使用して入力と一致し、数字のみを受け入れるという利点があるこのサンプルコードinsertStringを確認してください。それ以外のものは、テキストフィールドに挿入されません(のメソッドをオーバーライドすることで管理されますPlainDocument)。

于 2012-10-13T16:51:37.740 に答える
2

あなたが探しているのは、、DocumentFilterまたはDocumentListenerですJFormattedTextField。これらの3つはすべて、ドラッグアンドドロップ、コピーアンドペースト、またはテキストをテキストフィールドに配置するために考えられるその他のメカニズムもカバーしているため、キーリスナーを使用するよりも優れたソリューションです。

于 2012-10-13T15:25:35.927 に答える