Managing Listener Lists with EventListenerList : Event « Swing Event « Java Tutorial

Managing Listener Lists with EventListenerList
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.EventListener;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.event.EventListenerList;

class KeyTextComponent extends JComponent {
  private EventListenerList actionListenerList = new EventListenerList();

  public KeyTextComponent() {
    KeyListener internalKeyListener = new KeyAdapter() {
      public void keyPressed(KeyEvent keyEvent) {
        if (actionListenerList != null) {
          int keyCode = keyEvent.getKeyCode();
          String keyText = KeyEvent.getKeyText(keyCode);
          ActionEvent actionEvent = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, keyText);
    MouseListener internalMouseListener = new MouseAdapter() {
      public void mousePressed(MouseEvent mouseEvent) {


  public void addActionListener(ActionListener actionListener) {
    actionListenerList.add(ActionListener.class, actionListener);

  public void removeActionListener(ActionListener actionListener) {
    actionListenerList.remove(ActionListener.class, actionListener);

  protected void fireActionPerformed(ActionEvent actionEvent) {
    EventListener listenerList[] = actionListenerList.getListeners(ActionListener.class);
    for (int i = 0, n = listenerList.length; i < n; i++) {
      ((ActionListener) listenerList[i]).actionPerformed(actionEvent);

  public boolean isFocusable() {
    return true;

public class KeyTextComponentDemo {
  public static void main(String[] args) {
    JFrame aWindow = new JFrame();
    aWindow.setBounds(30, 30, 300, 300); // Size

    KeyTextComponent com = new KeyTextComponent();
    aWindow.add(com, "Center");
    com.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {



    aWindow.add(new JTextField(), "South");

    aWindow.setVisible(true); // Display the window

15.1.1.In the event model, there are three participants
15.1.2.Subclasses of AWTEvent
15.1.3.ActionEvent Example with One Button That Demonstrates Sources, Events, and Their ListenersActionEvent Example with One Button That Demonstrates Sources, Events, and Their Listeners
15.1.4.Enabling Other Low-level Events
15.1.5.Event maskEvent mask
15.1.6.Managing Listener Lists with AWTEventMulticasterManaging Listener Lists with AWTEventMulticaster
15.1.7.Semantic Events
15.1.8.Semantic Event Listeners
15.1.9.Managing Listener Lists with EventListenerListManaging Listener Lists with EventListenerList
15.1.10.Writing a Listener as an Anonymous ClassWriting a Listener as an Anonymous Class
15.1.11.Writing a listener as a nested class
15.1.12.Creating a Custom Event
15.1.13.Event object has information about an event, that has happened.
15.1.14.implements AWTEventListener java.awt.AWTEvent.getID()
15.1.16.Event source and listener
15.1.17.Process On Swing Event Thread