我有 3 个 swing 文本字段和一个 swing 按钮。我想要做的是当这 3 个字段都不为空时,将 button.setEnabled() 从 false 更改为 true。我想这并不难,但我只是找不到方法。 在一个文本字段的按键操作上使用 button.setEnabled(true) 很容易,但我如何检查所有这些? 感谢您的回复。
最佳答案
您不想只检查键盘输入,因为您还想考虑复制和粘贴输入和删除(停用 JButton)。我会为该字段的所有三个关联文档使用一个 DocumentListener,然后在所有文档都包含文本时将该按钮设置为启用。
例如,
import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
public class FieldListenerTest {
private static final int FIELD_COUNT = 5;
private static void createAndShowUI() {
JButton button = new JButton("Button");
FieldListener fieldListener = new FieldListener(button);
JPanel mainPanel = new JPanel(new GridLayout(0, 1));
for (int i = 0; i < FIELD_COUNT; i++) {
JTextField field = new JTextField(10);
fieldListener.registerDoc(field.getDocument());
mainPanel.add(field);
}
button.setEnabled(false);
mainPanel.add(button);
JFrame frame = new JFrame("FieldListenerTest");
frame.getContentPane().add(mainPanel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}
class FieldListener implements DocumentListener {
private List<Document> docs = new ArrayList<Document>();
private JButton button;
public FieldListener(JButton button) {
this.button = button;
}
public void registerDoc(Document doc) {
docs.add(doc);
doc.addDocumentListener(this);
}
@Override
public void changedUpdate(DocumentEvent arg0) {
update();
}
@Override
public void insertUpdate(DocumentEvent arg0) {
update();
}
@Override
public void removeUpdate(DocumentEvent arg0) {
update();
}
private void update() {
for (Document doc : docs) {
if (doc.getLength() == 0) {
button.setEnabled(false);
return;
}
}
button.setEnabled(true);
}
}
关于Java - 使用按键操作检查多个 JTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7861783/