我正在研究 Swing 的 GUI。
我有一个 JPanel
: 4 JTextField
和一个 JButton
里面。
当所有四个 JTextField
都不为空时,该按钮将启用。当四个文本字段中的任何一个为空时,按钮应该被禁用。
我的解决方案是:
addDocumentListener
用于所有 4 个文本文件。当其中一个文本字段更改时,我将检查所有 4 个文本字段并决定是否启用该按钮。
它有效但看起来很丑....
private void buttonAlter() {
if( !textField1.getText().isEmpty() && !textField2.getText().isEmpty() && !textField3.getText().isEmpty() && !textField4.getText().isEmpty()) {
button.setEnabled(true);
}else {
button.setEnabled(false);
}
}
//for all the textfields
textField1.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
buttonAlter();
}
@Override
public void removeUpdate(DocumentEvent e) {
buttonAlter();
}
@Override
public void changedUpdate(DocumentEvent e) {
}
});
我们还有其他更好的方法来做这件事吗?
非常感谢。
最佳答案
重用您的代码,不要重复自己。
收集所有文本字段:
Collection<JTextField> textFields = Arrays.asList(textField1, textField2, textField3, textField4);
稍后您可以使用它来启用/禁用:
private void buttonAlter() {
boolean allFilled = true;
for (JTextField textField : textFields)
allFilled &= !textField.getText().isEmpty();
button.setEnabled(allFilled);
}
对于听众:
// create one, single listener, store it in a variable
DocumentListener listener = new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
buttonAlter();
}
@Override
public void removeUpdate(DocumentEvent e) {
buttonAlter();
}
@Override
public void changedUpdate(DocumentEvent e) {
}
}
// use that same listener for all textFields
for (JTextField textField : textFields)
textField.getDocument().addDocumentListener(listener);
关于java - 如何在Swing中控制JButton?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34924693/