You can change event behavior dynamically : Swing Action « Event « Java






You can change event behavior dynamically

You can change event behavior dynamically
 
// : c14:DynamicEvents.java
// You can change event behavior dynamically.
// Also shows multiple actions for an event.
// <applet code=DynamicEvents
// width=250 height=400></applet>
// From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002
// www.BruceEckel.com. See copyright notice in CopyRight.txt.

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class DynamicEvents extends JApplet {
  private java.util.List list = new ArrayList();

  private int i = 0;

  private JButton b1 = new JButton("Button1"), b2 = new JButton("Button2");

  private JTextArea txt = new JTextArea();

  class B implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      txt.append("A button was pressed\n");
    }
  }

  class CountListener implements ActionListener {
    private int index;

    public CountListener(int i) {
      index = i;
    }

    public void actionPerformed(ActionEvent e) {
      txt.append("Counted Listener " + index + "\n");
    }
  }

  class B1 implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      txt.append("Button 1 pressed\n");
      ActionListener a = new CountListener(i++);
      list.add(a);
      b2.addActionListener(a);
    }
  }

  class B2 implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      txt.append("Button2 pressed\n");
      int end = list.size() - 1;
      if (end >= 0) {
        b2.removeActionListener((ActionListener) list.get(end));
        list.remove(end);
      }
    }
  }

  public void init() {
    Container cp = getContentPane();
    b1.addActionListener(new B());
    b1.addActionListener(new B1());
    b2.addActionListener(new B());
    b2.addActionListener(new B2());
    JPanel p = new JPanel();
    p.add(b1);
    p.add(b2);
    cp.add(BorderLayout.NORTH, p);
    cp.add(new JScrollPane(txt));
  }

  public static void main(String[] args) {
    run(new DynamicEvents(), 250, 400);
  }

  public static void run(JApplet applet, int width, int height) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(applet);
    frame.setSize(width, height);
    applet.init();
    applet.start();
    frame.setVisible(true);
  }
} ///:~



           
         
  








Related examples in the same category

1.Keymap and KeyStroke DemoKeymap and KeyStroke Demo
2.Use Action classUse Action class
3.How to have multiple listeners
4.Derive a class from a component and implement an action listener inside the class.
5.Demonstrate a listener being reusedDemonstrate a listener being reused