Java – 使用keytyped操作检查多个JTextField

我有3个swing文本字段和一个swing按钮。 我想要做的是当这3个字段都没有空时,将button.setEnabled()从false更改为true。 我想这不是很难,但我找不到办法去做。 在一个文本字段的keytyped操作上很容易有button.setEnabled(true),但我如何检查所有这些? 谢谢你的回复。

一个简单的方法:无论你在哪里放置button.setEnabled(true)都可以

 button.setEnabled(!tf1.getText().isEmpty() && !tf2.getText().isEmpty() && !tf3.getText().isEmpty()); 

您不想检查键盘输入,因为您还要考虑复制和粘贴输入删除(停用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 docs = new ArrayList(); 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); } } 

我就是这样做的:

创建一个匿名侦听器,检查字段是否为空,并相应地设置按钮状态(例如):

  DocumentListener listener = new DocumentListener() { public void changedUpdate(DocumentEvent e) { updateButton(); } public void insertUpdate(DocumentEvent e) { updateButton(); } private void updateButton() { boolean all_blank = tf1.getText().isEmpty() && tf2.getText().isEmpty() && tf3.getText().isEmpty(); button.setEnabled(!all_blank); } public void removeUpdate(DocumentEvent e) { updateButton(); } }; 

然后将其附加到所有字段:

 tf1.getDocument().addDocumentListener(listener); tf2.getDocument().addDocumentListener(listener); tf3.getDocument().addDocumentListener(listener); 

注意:正如Eng.Fouad所提到的,KeyListener不会使用粘贴,因此我将其更改为DocumentListener