1

我试图检查用户在文本框中输入字符时是否为数字。如果不是,则应立即将其从文本框中删除。

发生的情况是我输入数字 1(或任何数字或字符),当它显然是一个数字时,它会从文本框中删除该值。

这是我正在使用的事件:

private void txtLengthAKeyReleased(java.awt.event.KeyEvent evt) {
    removeLastChar(txtLengthA); //pass the textbox 
}

这是 removeLastChar() 方法:

public static void removeLastChar(JTextField txt)
{
    //Get string from text field
    String str = txt.getText();
    //Make sure length > 0
    if( (str.length()) != 0)
    {
        //Get the last char of the string
        String s = str.substring(str.length()-1, str.length()-1);
        System.out.println(s);   //test debug
        //If not numeric (try/catch Double.parseDouble)
        if(!isNumeric(s));
        {
            //Remove last char from the text box
            str = str.substring(0, str.length()-1);
            txt.setText(str);
        }
    }
}

检查字符串是否为数字:

isNumeric() function:
    public static boolean isNumeric(String str)  
    {  
      try  
      {  
        double d = Double.parseDouble(str);  
      }  
      catch(NumberFormatException nfe)  
      {  
        return false;  
      }  
      return true;  
    }
4

3 回答 3

1

使用KeyListeners过滤或修改JTextComponets只会以眼泪收场。

你应该使用一个DocumentFilter

检查使用文档列表器限制文本字段中的字符,如果无效,则删除 JTextField 中的最后一次击键,以及JTextField 限制字符量输入并仅接受数字示例(尤其是最后一个问题中答案的链接)

于 2012-10-22T06:08:59.770 回答
1

如果用户在文本字段中间键入非数字字符会发生什么?还是一开始?

您可以使用 DocumentFilter 实现更好的解决方案:http: //docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html#filter

当您确定要插入或替换的字符串有效时,您只需要调用 super.insert...。(在您的情况下为数字)。

于 2012-10-22T06:12:25.377 回答
0

它应该是

        String s = str.substring(str.length()-1, str.length();

使用您的代码,值s始终是一个空字符串。

要测试单个字符是否为数字,请使用

Character.isDigit(str.substring(0,1))
于 2012-10-22T05:48:40.463 回答