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