我有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;
}
}
答案 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
,而是传递字符串值。