1

押されたキーをフィルタリングしたいJTextField。数字のみを許可し、他の文字が押された場合はそれを削除するか、テキスト フィールドへの格納を許可しないようにします。

を使用し、メソッドを使用することを考えてaddKeyListenerいます:キーが押され、キーが離されました。

何か案は?

4

3 に答える 3

1

これを試して

final JTextField myTextField = new JTextField();
myTextField.addKeyListener(new KeyListener() {
      String oldText = "";
      public void keyPressed(KeyEvent keyEvent) {
                // Store old text in a temporary variable
                oldText = myTextField.getText();
      }

      public void keyReleased(KeyEvent keyEvent) {
                 // Make sure that the user is typing a number else replace with old text.
                 int charCode = (int)keyEvent.getKeyChar();
                 if (charCode  < 48 || charCode  > 57){
                     myTextField.setText(oldText); // Replace with old text.
                 }
      }

      public void keyTyped(KeyEvent keyEvent) {
      }
    });
于 2013-02-02T12:15:01.723 に答える
1

Ravindra氏の答えは正しいですが、連続して入力すると失敗します..これが役立つことを願っています:

    final JTextField myTextFiled=new JTextField();
    JFrame frame=new JFrame("onlyNums");
    KeyListener myKeyListner=new KeyListener() {

        @Override
        public void keyTyped(KeyEvent e) {
            // TODO Auto-generated method stub
            if(e.getKeyChar()>='0' && e.getKeyChar()<='9')                  
                myTextFiled.setText(myTextFiled.getText()+e.getKeyChar());
            else if(e.getKeyChar()==KeyEvent.VK_BACK_SPACE && myTextFiled.getText().length()>0)
                myTextFiled.setText(myTextFiled.getText().substring(0, myTextFiled.getText().length()-1));
        }

        @Override
        public void keyReleased(KeyEvent e) {
            // TODO Auto-generated method stub              
        }

        @Override
        public void keyPressed(KeyEvent e) {
            // TODO Auto-generated method stub              
        }
    };
    //to null out handling other inputs
    myTextFiled.setInputMap(JTextField.WHEN_FOCUSED, new InputMap());
    //to add your own handling
    myTextFiled.addKeyListener(myKeyListner);

注: ポインターの位置から挿入/削除するには、処理を追加する必要があります。

よろしく、

于 2013-02-02T13:12:06.430 に答える
0

カスタムを使用しますDocument:

public class NumericDocument extends PlainDocument {

    @Override
    public void insertString(int pos, String text, AttributeSet as)
                                               throws BadLocationException {
        try {
            Integer.parseInt(text);
            super.insertString(pos, text, as);
        } catch(NumberFormatException e) {
            Toolkit.getDefaultToolkit().beep();
        }
    }

}

あなたにインストールしますTextField

JtextField field = new JTextField();
field.setDocument(new NumericDocument());

これは、テキストが貼り付けられていても機能します (noKeyEventが発行された場合)。

于 2013-02-03T09:46:19.070 に答える