Mega Code Archive

 
Categories / Java / Event
 

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);   } } ///:~