假设我有一个输入字段,只有在按下提交按钮时才接受Int
。
如果字段检查不是int
,我该怎么说禁用按钮。
忽略Add Number
按钮,它无关紧要。
答案 0 :(得分:2)
你 可以像这样使用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);
}
}
});
答案 1 :(得分:1)
正如其他人已经说过的那样,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);
}
});