Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 输入不正确字符时清除文本字段有困难_Java_Swing_Keylistener - Fatal编程技术网

Java 输入不正确字符时清除文本字段有困难

Java 输入不正确字符时清除文本字段有困难,java,swing,keylistener,Java,Swing,Keylistener,我试图从按键上的JTextField中检索值,如果值是整数,则执行一些操作,如果值不是整数,则清除该字段。每次我尝试检索该值时,我都会获取在此之前输入的值(如果我输入12,则返回1,如果我输入123,则返回12),并且当我尝试清除无效字符上的字段时,除了无效字符之外的所有内容都会被清除 public void setUpListeners() { JTextField jT [] = myV.getTextFields(); jT[0].addKeyListener(new K

我试图从按键上的JTextField中检索值,如果值是整数,则执行一些操作,如果值不是整数,则清除该字段。每次我尝试检索该值时,我都会获取在此之前输入的值(如果我输入12,则返回1,如果我输入123,则返回12),并且当我尝试清除无效字符上的字段时,除了无效字符之外的所有内容都会被清除

public void setUpListeners()
{
    JTextField jT [] = myV.getTextFields();

    jT[0].addKeyListener(new KeyAdapter(){ 
        public void keyTyped(KeyEvent e){
            int id = e.getID();

            if (id == KeyEvent.KEY_TYPED) 
            {
                char c = e.getKeyChar();
                try
                {
                    //check if chars entered are numbers
                    int temp = Integer.parseInt(String.valueOf(c));
                    String tempS = jT[0].getText();
                    System.out.println(tempS);
                }
                catch(Exception ex)
                {
                    jT[0].setText("");
                    System.out.println("Not an integer");

                }
            }
        }
   });
 }

您可以执行以下操作:

public static boolean validateNumber(char num){
    return (num >= '0' && num <='9');
}
而不是使用

public void keyTyped(KeyEvent e){
使用

我想你会得到你所需要的,我希望我帮助过你;)

Swing组件使用模型视图控制器(MVC)[软件]设计模式/架构。模型保存数据。对于
JTextField
,数据是它显示的文本。
JTextField
的默认模型是,然而
JTextField
code实际上指的是
Document
接口,该接口由
PlainDocument
实现

查看类
JTextComponent
(它是
JTextField
的超类)中方法
getText()
的代码,您将看到它从
文档中检索文本

当您在
JTextField
中键入一个键时,该字符将被传递到
文档
。似乎在键入的字符到达
文档
之前调用了
keyTyped()
方法,因此,在
keyTyped()
方法中调用
getText()
时,除了键入的最后一个字符之外,还将获得所有文本

这是不使用
键侦听器来验证输入
JTextField
的文本的原因之一。正确的方法在tenorsax对您的问题的评论中提供了链接的问题中有详细说明


除了或(甚至)之外,您还可以将
ActionListener
发送到
JTextField
,当您在
JTextField
中按Enter键时,将执行该命令。您会发现许多关于如何实现这些选项的在线示例,包括tenorsax comment中提供的链接。

不要使用
KeyListener
,请参阅以了解使用
DocumentFilter.
JFormattedTextField
的更好实现方法。不要使用文本字段<代码>新JSpinner(新喷丝头型号(5,0100,1))
对最终用户更友好。感谢您的回答,它现在可以完美地处理无效字符,但当我键入有效数字时,我仍然存在它落后的问题?我得到:java.lang.NumberFormatException:for input string:“对于我的第一个字符,即使它是一个数字,我也不知道为什么。在我看来,您收到的异常情况似乎是您输入的值为空“”,但随着键的释放,它应该得到修复。啊,我明白为什么了,现在非常感谢您的再次回复!非常感谢,这正是我想要帮助我理解的。
public void keyTyped(KeyEvent e){
public void keyReleased(KeyEvent e){