Java - 使用按键操作检查多个 JTextField

标签 java swing

我有 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/

相关文章:

java - 输入流使程序等待

java - 什么是 jvm 预分配异常?

java - JTextField 在设置比其初始大小长的文本后调整大小?

java - 在没有渲染器的情况下更改 JComboBox 颜色

java - 有没有办法让 Java 文件选择对话框记住最后一个目录?

Java 泛型 : Unchecked cast from List<capture#10-of ? > 到 List<Object>

java - 在 Java 中使用 toString() 进行单元测试

java - JTextArea 与 JPanel 内的 JScrollPane 不能很好地配合

java - 我可以在 init 之外的代码中添加文本字段吗?

java - 有效大二进制字符串上的 BigInteger NumberFormatException