Swing Java Tutorial

import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.Document;
public class Main {
  public Main() {
    JButton button = new JButton("foo");
    JTextField textField = new JTextField(10);
    Document document = textField.getDocument();
    document.addDocumentListener(new JButtonStateController(button));
  
    JFrame frame = new JFrame();
    frame.add(button,BorderLayout.WEST);
    frame.add(textField,BorderLayout.CENTER);
    frame.setSize(300,300);
    frame.setVisible(true);
  }
}
class JButtonStateController implements DocumentListener {
 JButton button;
  
  JButtonStateController(JButton button) {
     this.button = button ;
  }
  public void changedUpdate(DocumentEvent e) {
    disableIfEmpty(e);
  }
  public void insertUpdate(DocumentEvent e) {
    disableIfEmpty(e);
  }
  public void removeUpdate(DocumentEvent e) {
    disableIfEmpty(e);
  }
  public void disableIfEmpty(DocumentEvent e) {
    button.setEnabled(e.getDocument().getLength() > 0);
  }
}