19.09.2015 Views

Prentice.Hall.Introduction.to.Java.Programming,.Brief.Version.9th.(2014).[sharethefiles.com]

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

16.6 Alternative Ways of Defining Listener Classes 613<br />

19 add(panel);<br />

20<br />

21 // Create a listener<br />

22 But<strong>to</strong>nListener listener = new But<strong>to</strong>nListener();<br />

23<br />

24 // Register listener with but<strong>to</strong>ns<br />

25 jbtNew.addActionListener(listener);<br />

26 jbtOpen.addActionListener(listener);<br />

27 jbtSave.addActionListener(listener);<br />

28 jbtPrint.addActionListener(listener);<br />

29 }<br />

30<br />

31 class But<strong>to</strong>nListener implements ActionListener {<br />

32 @Override<br />

33 public void actionPerformed(ActionEvent e) {<br />

34<br />

35<br />

if (e.getSource() == jbtNew)<br />

System.out.println("Process New");<br />

36<br />

37<br />

else if (e.getSource() == jbtOpen)<br />

System.out.println("Process Open");<br />

38<br />

39<br />

else if (e.getSource() == jbtSave)<br />

System.out.println("Process Save");<br />

40<br />

41<br />

else if (e.getSource() == jbtPrint)<br />

System.out.println("Process Print");<br />

42 }<br />

43 }<br />

44<br />

45 /** Main method */<br />

46 public static void main(String[] args) {<br />

47 JFrame frame = new DetectSourceDemo();<br />

48 frame.setTitle("DetectSourceDemo");<br />

49 frame.setLocationRelativeTo(null); // Center the frame<br />

50 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br />

51<br />

52<br />

frame.pack();<br />

frame.setVisible(true);<br />

53 }<br />

54 }<br />

create listener<br />

register listener<br />

listener class<br />

handle event<br />

This program defines just one inner listener class (lines 31–43), creates a listener from the<br />

class (line 22), and registers it <strong>to</strong> four but<strong>to</strong>ns (lines 25–28). When a but<strong>to</strong>n is clicked, the but<strong>to</strong>n<br />

fires an ActionEvent and invokes the listener’s actionPerformed method. The<br />

actionPerformed method checks the source of the event using the getSource() method<br />

for the event (lines 34, 36, 38, 40) and determines which but<strong>to</strong>n fired the event.<br />

Defining one listener class for handling a large number of events is efficient. In this case,<br />

you create just one listener object. Using anonymous inner classes, you would create four listener<br />

objects.<br />

You could also rewrite Listing 16.4 by defining the cus<strong>to</strong>m frame class that implements<br />

ActionListener, as shown in Listing 16.6.<br />

LISTING 16.6<br />

FrameAsListenerDemo.java<br />

1 import javax.swing.*;<br />

2 import java.awt.event.*;<br />

3<br />

4 public class FrameAsListenerDemo extends JFrame<br />

5 implements ActionListener {<br />

6 // Create four but<strong>to</strong>ns<br />

7 private JBut<strong>to</strong>n jbtNew = new JBut<strong>to</strong>n("New");<br />

8 private JBut<strong>to</strong>n jbtOpen = new JBut<strong>to</strong>n("Open");<br />

9 private JBut<strong>to</strong>n jbtSave = new JBut<strong>to</strong>n("Save");<br />

implement ActionListener

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!