Swing JButton deaktivieren, wenn nicht alle JTextFields ausgefüllt sind.

bluu7

Mitglied
Hallo,

ich habe zwei TextFields und einen OK-Button. Der Button ist deaktiviert und soll nur aktiviert werden, wenn beide TextFields eine Eingabe enthalten. Wie mache ich das?

Ich habe auf StackOverflow das hier gefunden:
Code:
    nameField.getDocument().addDocumentListener(new DocumentListener() {
            public void changedUpdate(DocumentEvent e) {
                changed();
            }

            public void removeUpdate(DocumentEvent e) {
                changed();
            }

            public void insertUpdate(DocumentEvent e) {
                changed();
            }

            public void changed() {
                if (nameField.getText().equals("")) {
                    nameIsEmpty = true;
                } else {
                    nameIsEmpty = false;
                }
            }

        });

Nur dass hier z.B. statt
Code:
nameIsEmpty = true;
der Button direkt deaktiviert wurde. Ich habe das mit dem boolean-Wert versucht und für das zweite TextField auch so übernommen. Wollte dann in einer if-Abfrage die beiden boolean-Werte überprüfen und dementsprechend den Button aktivieren/deaktivieren.
Aber hier habe ich das Problem, dass mein Programm dann ja kontinuierlich diese if-Abfrage checken müsste. Wie gehe ich hier am besten vor?

Grüße
 
Kleines Beispielprogramm:
Java:
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class Test {
  public static void main(String... args) {
    ButtonTest.show();
  }
  
}

class ButtonTest {
  
  private ButtonTest() {
    JFrame frame = new JFrame("Button Test");
    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    frame.setLocationByPlatform(true);
    
    JPanel mainPanel = new JPanel(new GridLayout(4, 1));
    
    JTextField field1 = new JTextField(20);
    JTextField field2 = new JTextField(20);
    JLabel text = new JLabel();
    JButton printButton = new JButton("Print");
    printButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        text.setText(field1.getText() + " - " + field2.getText());
      }
    });
    printButton.setEnabled(!field1.getText().isEmpty() && !field2.getText().isEmpty());
    for (JComponent c : Arrays.asList(field1, field2, text, printButton)) {
      mainPanel.add(c);
    }
    
    setDocumentListener(field1, field2, printButton);
    setDocumentListener(field2, field1, printButton);
    
    frame.add(mainPanel);
    frame.pack();
    frame.setVisible(true);
  }
  
  private void setDocumentListener(JTextField field, JTextField other, JButton button) {
    field.getDocument().addDocumentListener(new DocumentListener() {
      @Override
      public void removeUpdate(DocumentEvent e) {
        changed();
      }
      
      @Override
      public void insertUpdate(DocumentEvent e) {
        changed();
      }
      
      @Override
      public void changedUpdate(DocumentEvent e) {
        changed();
      }
      
      private void changed() {
        setButtonStatus(button, field.getText(), other.getText());
      }
    });
  }
  
  private void setButtonStatus(JButton button, String field1, String field2) {
    button.setEnabled(!field1.isEmpty() && !field2.isEmpty());
  }
  
  public static void show() {
    SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        new ButtonTest();
      }
    });
  }
}
 

Zurück
Oben