Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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 将jTextField恢复为最后一个正确值_Java_Inputverifier - Fatal编程技术网

Java 将jTextField恢复为最后一个正确值

Java 将jTextField恢复为最后一个正确值,java,inputverifier,Java,Inputverifier,对于jTextField,我有一个InputVerifier来检查用户的输入是否为整数。如果不是,我想将其恢复为上一个良好值。我该怎么做?以下是我目前掌握的代码: class IntegerVerifier extends InputVerifier { public boolean verify(JComponent input) { JTextField text = (JTextField)input; String old = t

对于
jTextField
,我有一个
InputVerifier
来检查用户的输入是否为整数。如果不是,我想将其恢复为上一个良好值。我该怎么做?以下是我目前掌握的代码:

class IntegerVerifier extends InputVerifier {

    public boolean verify(JComponent input) {
            JTextField text = (JTextField)input;
            String old = text.getText();
        try {
            Integer.parseInt(text.getText().trim());
        } catch (NumberFormatException e) {
            // this does not work b/c input is not a TextField
            input.setText(old); 
        }
        return true;
    }

}
编辑:下面是我最终使用的解决方案。我最初确实试过,但似乎不起作用。我发现错误在测试中。我试图在启动gui后立即将textfield更改为无效值,但它会清空该字段。然而,当gui启动时,textfield就有了焦点,所以我认为它的初始值是null。随后的更改按预期进行

class IntegerVerifier extends InputVerifier {
    public boolean verify(JComponent input) {
        JTextField text = (JTextField) input;
        String old = text.getText();
        try {
            Integer.parseInt(text.getText().trim());
        } catch (NumberFormatException e) {
            text.setText(old);
            //return false; // don't use this otherwise it won't revert the value
        }
        return true;
    }
}

您的问题指向不同的问题,即代码中的注释。验证后,应保存旧值,如果当前输入无效,则应恢复旧值。您应该调用
text.setText()
,而不是
input.setText()
。大概是这样的:

class IntegerVerifier extends InputVerifier {
    String lastGood = "";
    public boolean verify(JComponent input) {
        JTextField text = (JTextField)input;
        String value = text.getText().trim();
        try {
            Integer.parseInt(value);
            lastGood = value;
        } catch (NumberFormatException e) {
            text.setText(lastGood);
            // assumed it should return false
           return false;
        }
        return true;
    }
}

您的问题指向不同的问题,即代码中的注释。验证后,应保存旧值,如果当前输入无效,则应恢复旧值。您应该调用
text.setText()
,而不是
input.setText()
。大概是这样的:

class IntegerVerifier extends InputVerifier {
    String lastGood = "";
    public boolean verify(JComponent input) {
        JTextField text = (JTextField)input;
        String value = text.getText().trim();
        try {
            Integer.parseInt(value);
            lastGood = value;
        } catch (NumberFormatException e) {
            text.setText(lastGood);
            // assumed it should return false
           return false;
        }
        return true;
    }
}

只传递字符串值而不是传递
JComponent

只传递字符串值而不是传递
JComponent