Java - проверка нескольких JTextFields с помощью действия с типом ключа - PullRequest
0 голосов
/ 22 октября 2011

У меня есть 3 текстовых поля и кнопка свинга. То, что я хочу сделать, это изменить button.setEnabled () с false на true, если ни одно из этих 3 полей не заполнено. Я полагаю, это не очень сложно, но я просто не могу найти способ сделать это. Легко иметь button.setEnabled (true) для действия с типом клавиши одного текстового поля, но как мне проверить их все? Спасибо за ваши ответы.

Ответы [ 3 ]

4 голосов
/ 22 октября 2011

Вы не хотите проверять только ввод с клавиатуры, так как вы также хотите учитывать удаление и копирование ввода и (деактивируйте 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);
   }

}
2 голосов
/ 22 октября 2011

Вот как бы я это сделал:

Создание одного анонимного прослушивателя, который проверяет, являются ли поля пустыми, и соответственно устанавливает состояние кнопки (например):

     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

0 голосов
/ 22 октября 2011

Один простой способ: куда бы вы ни положили button.setEnabled(true), положите что-то вроде

button.setEnabled(!tf1.getText().isEmpty() && !tf2.getText().isEmpty() && !tf3.getText().isEmpty());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...