Event Java

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MulticastEvent extends JPanel implements ActionListener {
  private int counter = 0;
  private JButton closeAllButton;
  public MulticastEvent() {
    JButton newButton = new JButton("New");
    add(newButton);
    newButton.addActionListener(this);
    closeAllButton = new JButton("Close all");
    add(closeAllButton);
  }
  public void actionPerformed(ActionEvent evt) {
    CloseFrame f = new CloseFrame();
    counter++;
    f.setTitle("Window " + counter);
    f.setSize(200, 150);
    f.setLocation(30 * counter, 30 * counter);
    f.show();
    closeAllButton.addActionListener(f);
  }
  public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setTitle("MulticastTest");
    frame.setSize(300, 200);
    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
    Container contentPane = frame.getContentPane();
    contentPane.add(new MulticastEvent());
    frame.show();
  }
  class CloseFrame extends JFrame implements ActionListener {
    public void actionPerformed(ActionEvent evt) { // handles Close all
                            // button
      setVisible(false);
    }
  }
}