将jTextField恢复为持续良好值

时间:2010-11-21 15:57:37

标签: java inputverifier

我有InputVerifier jTextField检查并查看用户的输入是否为整数。如果不是,我想将其恢复到最后的好价值。我怎么做到这一点?这是我到目前为止的代码:

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后立即将文本字段更改为无效值,但它会使字段空白。然而,一旦gui开始,文本字段就有了焦点,所以我认为它的初始值是空的。后续更改的行为符合预期。

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

2 个答案:

答案 0 :(得分:1)

您的问题指出了不同的问题,即代码中的注释。您应该在验证之后保存旧值,如果当前输入无效,则还原。您应该致电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;
    }
}

答案 1 :(得分:0)

不是传递JComponent,而是传递字符串值。