【问题标题】:Allow characters storage on JTextField only if are numbers仅当是数字时才允许在 JTextField 上存储字符
【发布时间】:2013-01-17 16:10:37
【问题描述】:

我想过滤在JTextField 上按下的键。 我希望只允许数字,如果按下其他字符,则将其删除或不允许在文本字段中存储。

我正在考虑使用addKeyListener,并使用方法:按下键和释放键。

有什么想法吗?

【问题讨论】:

标签: java swing validation jtextfield keylistener


【解决方案1】:

使用自定义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());

即使粘贴了文本(没有触发KeyEvent),这也会起作用。

【讨论】:

    【解决方案2】:

    没有冒犯,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);
    

    注意:您必须添加处理以从指针位置插入/删除。

    问候,

    【讨论】:

    • 如果执行复制-粘贴会怎样?
    【解决方案3】:

    试试这个

    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-12-30
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多