// Multilistener.java import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.event.ActionEvent; public class MultiListener extends JApplet implements ActionListener { JTextArea topTextArea; JTextArea bottomTextArea; JButton button1, button2; public void init() { JLabel l = null; Container container = getContentPane(); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); container.setLayout(gridbag); c.fill = GridBagConstraints.BOTH; c.gridwidth = GridBagConstraints.REMAINDER; l = new JLabel("What MultiListener hears:"); gridbag.setConstraints(l, c); container.add(l); c.weighty = 1.0; topTextArea = new JTextArea(5, 20); topTextArea.setEditable(false); JScrollPane topScroller = new JScrollPane(topTextArea); gridbag.setConstraints(topScroller, c); container.add(topScroller); c.weightx = 0.0; c.weighty = 0.0; l = new JLabel("What Eavesdropper hears:"); gridbag.setConstraints(l, c); container.add(l); c.weighty = 1.0; bottomTextArea = new JTextArea(5, 20); bottomTextArea.setEditable(false); JScrollPane bottomScroller = new JScrollPane(bottomTextArea); gridbag.setConstraints(bottomScroller, c); container.add(bottomScroller); c.weightx = 1.0; c.weighty = 0.0; c.gridwidth = 1; c.insets = new Insets(10, 10, 0, 10); button1 = new JButton("Blah blah blah"); gridbag.setConstraints(button1, c); container.add(button1); c.gridwidth = GridBagConstraints.REMAINDER; button2 = new JButton("You don't say!"); gridbag.setConstraints(button2, c); container.add(button2); button1.addActionListener(this); button2.addActionListener(this); button2.addActionListener(new Eavesdropper(bottomTextArea)); } public void actionPerformed(ActionEvent e) { topTextArea.append(e.getActionCommand() + "\n"); } } class Eavesdropper implements ActionListener { JTextArea myTextArea; public Eavesdropper(JTextArea ta) { myTextArea = ta; } public void actionPerformed(ActionEvent e) { myTextArea.append(e.getActionCommand() + "\n"); } }