验证Java中的整数值的问题

时间:2011-06-23 09:23:35

标签: java eclipse-rcp validation

您好我正在使用 Eclipse Rcp ,我需要验证只接受整数值的文本框我已经使用了代码

 txtCapacity.addKeyListener(new KeyAdapter() {
              public void keyPressed(KeyEvent EVT) {                     

                    if((EVT.character>='0' && EVT.character<='9')){
                          txtCapacity.setEditable(true);                    
                           txtCapacity.setEditable(true);

                      } else {
                          txtCapacity.setEditable(false);
                             System.out.println("enter only the numeric number");                                  
                      }
              }
      });

验证但问题是我不能使用退格键删除号码。请告诉我验证小数的想法。 提前谢谢

7 个答案:

答案 0 :(得分:3)

不要使用KeyListener!请使用VerifyListener,因为这将处理粘贴,退格,替换.....

E.g。

text.addVerifyListener(new VerifyListener() {
  @Override
  public void verifyText(VerifyEvent e) {
    final String oldS = text.getText();
    final String newS = oldS.substring(0, e.start) + e.text + oldS.substring(e.end);

    try {
      new BigDecimal(newS);
      // value is decimal
    } catch (final NumberFormatException numberFormatException) {
      // value is not decimal
      e.doit = false;
    }
  }
});

答案 1 :(得分:2)

当您使用侦听器时,您可以清空文本字段,而不是使其不可编辑。您可以执行类似的操作,该代码段基于您的代码。

txtCapacity.addKeyListener(new KeyAdapter() {
        public void keyReleased(KeyEvent EVT) {                     
             if(!(EVT.character>='0' && EVT.character<='9')){
                    txtCapabity.setText(""); 
             }
        }
});

或者如果您使用JFormattedTextField则更好。我不确定你是否在SWT中有这个,即使你没有尝试寻找类似的东西。

答案 2 :(得分:1)

另一种可能性是使用Nebular中的FormattedTextField-Widget,请参阅http://www.eclipse.org/nebula/widgets/formattedtext/formattedtext.php 优点是你只需要提供一个模式,不需要编写自己的监听器..

答案 3 :(得分:0)

您可以使用此功能验证号码:

    public static int validateInteger(String number)
    {
        int i = -1;

        try {
            i = Integer.parseInt(number);
        }
        catch (NumberFormatException nfe)
        {}
        catch (NullPointerException npe)
        {}

        return i;
    }

如果函数返回的值小于零,则它不是有效的正数。

答案 4 :(得分:0)

为验证value是否为小数,您只需使用 -

即可
try {
        new BigDecimal(value.toString());
        // value is decimal
} catch (NumberFormatException numberFormatException) {
    // value is not decimal
}

答案 5 :(得分:0)

您应该在文本框中设置Document。您可以实施客户文档以过滤有效输入以满足您的要求。每次在字段中添加或删除文本时,文档都会检查整体输入是否有效。

答案 6 :(得分:0)

txtfield.addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent evt) {                     

        char c=evt.getKeyChar();
        if(Character.isLetter(c))
        {
            JOptionPane.showMessageDialog(null, "PLEASE ENTER A DIGIT", "INVALID NUMBER", JOptionPane.ERROR_MESSAGE);
            txtfield.setBackground(Color.PINK);
            txtfield.setText("");

            String s = txtfield.getText();
            if(s.length() == 0){
                txtfield.setBackground(Color.PINK);
            }
        }
        else
        {
            txtfield.setBackground(Color.white);
        }            
    }
});