[英]How can I real time check for exceptions after JTextField has been entered
假設我有一個輸入字段,僅在按下提交按鈕時才接受Int
。
我該怎么說呢?如果該字段不是int
禁用按鈕。
忽略“ Add Number
按鈕是無關緊要的。
您可以像這樣使用DocumentListener
:
Document document = jTextFiled.getDocument();
document.addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
check();
}
@Override
public void removeUpdate(DocumentEvent e) {
check();
}
@Override
public void changedUpdate(DocumentEvent e) {
check();
}
private void check() {
if (!isInteger(jTextFiled.getText())) {
jButton.setEnabled(false);
} else {
jButton.setEnabled(true);
}
}
});
正如其他人已經說過的那樣, JFormattedTextField是執行此操作的最佳方法。 您需要自定義格式化程序的valueToString
方法,因為NumberFormat通常會忽略尾隨字符:
final JButton acceptButton = new JButton("Add Volume");
acceptButton.setEnabled(false);
NumberFormat format = NumberFormat.getIntegerInstance();
NumberFormatter formatter = new NumberFormatter(format) {
@Override
public Object stringToValue(String text)
throws ParseException {
ParsePosition pos = new ParsePosition(0);
Object value = getFormat().parseObject(text, pos);
if (value != null && pos.getIndex() >= text.length()) {
return value;
}
throw new ParseException(text, pos.getErrorIndex());
}
};
formatter.setCommitsOnValidEdit(true);
formatter.setAllowsInvalid(true);
JFormattedTextField field = new JFormattedTextField(formatter);
field.setFocusLostBehavior(JFormattedTextField.COMMIT);
field.addPropertyChangeListener("editValid",
new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
boolean valid = (Boolean) event.getNewValue();
acceptButton.setEnabled(valid);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.