在 Java 中验证整数值的问题

发布于 2024-11-16 19:31:42 字数 758 浏览 5 评论 0原文

您好,我正在使用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");                                  
                      }
              }
      });

它验证了但是这个问题是我无法使用退格键用于删除号码。请告诉我验证小数的想法。 提前致谢

hi i am using Eclipse Rcp and i need to validate the textbox that only accept the integer value for that i have use the code

 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");                                  
                      }
              }
      });

It validates But the Problem with this one is that i cannot use the Backspace key for deleteting the number. and please tell me idea for Validating the decimal too.
thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

脸赞 2024-11-23 19:31:42

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

例如

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;
    }
  }
});

Dont use the KeyListener! Use a VerifyListener instead as this will handle paste, backspace, replace.....

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;
    }
  }
});
总攻大人 2024-11-23 19:31:42

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

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

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

As you are using a listener, you can empty the text field, instead of making it not-editable. You can do something like this, the snippet is based upon your code.

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

Or better if you use JFormattedTextField. I'm not sure if you have that in SWT, even if you don't then try to look for the similar.

り繁华旳梦境 2024-11-23 19:31:42

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

Another possibility is to use the FormattedTextField-Widget from Nebular, see http://www.eclipse.org/nebula/widgets/formattedtext/formattedtext.php
The advantage is that you only have to provide a pattern, there is no need to write your own listeners..

鯉魚旗 2024-11-23 19:31:42

您可以使用此函数来验证数字是否:

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

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

        return i;
    }

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

You can use this function to validate if the number:

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

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

        return i;
    }

If the function returns a value less than zero, then it is not a valid positive number.

我只土不豪 2024-11-23 19:31:42

要验证 value 是否实际上是十进制,您可以简单地使用 -

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

For validating if a value is infact decimal or not, you can simply use -

try {
        new BigDecimal(value.toString());
        // value is decimal
} catch (NumberFormatException numberFormatException) {
    // value is not decimal
}
凉世弥音 2024-11-23 19:31:42

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

You should probably set a Document on your text box. You can implement a customer Document to filter for valid input to satisfy your requirements. Each time text is added or removed from your field, the Document will check if the overall input is valid.

小…楫夜泊 2024-11-23 19:31:42
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);
        }            
    }
});
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);
        }            
    }
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文