我的文字字段很少。如果用户填写所有文本字段,如何启用按钮,如果用户删除了某些内容则禁用我正在使用Swing。
答案 0 :(得分:1)
由于swing基于MVC,因此您可以使用模型对象并聆听更改。
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Container contentPane = frame.getContentPane();
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.PAGE_AXIS));
JTextField textField1 = new JTextField(30);
JTextField textField2 = new JTextField(30);
JTextField textField3 = new JTextField(30);
JButton jButton = new JButton("Button");
ButtonModel model = jButton.getModel();
Document document1 = textField1.getDocument();
Document document2 = textField2.getDocument();
Document document3 = textField3.getDocument();
ButtonEnablement buttonEnablement = new ButtonEnablement(model);
buttonEnablement.addDocument(document1);
buttonEnablement.addDocument(document2);
buttonEnablement.addDocument(document3);
contentPane.add(textField1);
contentPane.add(textField2);
contentPane.add(textField3);
contentPane.add(jButton);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
每当Document
更改ButtonEnablement
时,Document
会查看所有ButtonModel
并启用public class ButtonEnablement implements DocumentListener {
private ButtonModel buttonModel;
private List<Document> documents = new ArrayList<Document>();
public ButtonEnablement(ButtonModel buttonModel) {
this.buttonModel = buttonModel;
}
public void addDocument(Document document) {
document.addDocumentListener(this);
this.documents.add(document);
documentChanged();
}
public void documentChanged() {
boolean buttonEnabled = false;
for (Document document : documents) {
if (document.getLength() > 0) {
buttonEnabled = true;
break;
}
}
buttonModel.setEnabled(buttonEnabled);
}
@Override
public void insertUpdate(DocumentEvent e) {
documentChanged();
}
@Override
public void removeUpdate(DocumentEvent e) {
documentChanged();
}
@Override
public void changedUpdate(DocumentEvent e) {
documentChanged();
}
}
。
ButtonModel
使用Document
和JButton
代替JTextField
和{{1}}的好处是,您可以轻松更改具体实施,而不必担心关于ui组件如何更新,因为它们在模型更改时会自动更新。
答案 1 :(得分:0)
您可以设置事件侦听器以查看文本字段何时更改。如果字段为空,则禁用该按钮:
field1.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) { //watch for key strokes
if(field1.getText().length() == 0 || field2.getText().length() == 0)
button.setEnabled(false);
else
{
Button.setEnabled(true);
}
}
});
这里的策略是: