23
Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP://WWW-SCF.USC.EDU/ ~CSCI201 USC CSCI 201L

Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Embed Size (px)

DESCRIPTION

Event-Driven Programming Overview ▪The code we have written so far executed deterministically from top to bottom, calling methods and utilizing other classes ›We utilized user input to determine code that was executed in some cases, but we had prompted the user and waited for a response ▪In GUI programming, the code that gets called is based on events, such as a user clicking or a user typing something ›We don’t know the order in which users will perform the actions though ›We need to associate an action with a method USC CSCI 201L3/23 Event-Driven Programming Overview

Citation preview

Page 1: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Event-Driven ProgrammingCSCI 201L

Jeffrey Miller, Ph.D.

HTTP://WWW-SCF.USC.EDU/~CSCI201

USC CSCI 201L

Page 2: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Outline

USC CSCI 201L 2/23

▪ Event-Driven Programming Overview▪ Event-Driven Programming Example▪ Adapter Classes▪ Program

Page 3: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Event-Driven Programming Overview

▪ The code we have written so far executed deterministically from top to bottom, calling methods and utilizing other classes› We utilized user input to determine code that was

executed in some cases, but we had prompted the user and waited for a response

▪ In GUI programming, the code that gets called is based on events, such as a user clicking or a user typing something› We don’t know the order in which users will perform the

actions though› We need to associate an action with a method

USC CSCI 201L 3/23Event-Driven Programming Overview

Page 4: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Fired EventsSource Object User Action Event Type Fired

JButton Click the button ActionEvent

JTextField Press enter key ActionEvent

JComboBox Select an item ItemEvent, ActionEvent

JList Select one or more items ListSelectionEvent

JCheckBox Click a check box ItemEvent, ActionEvent

JRadioButton Click a radio button ItemEvent, ActionEvent

JMenuItem Select a menu item ActionEvent

JScrollBar Move the scroll bar AdjustmentEvent

JSlider Move the slider bar ChangeEvent

Window Open, closing, closed, iconify, deiconify, activate, deactive the window

WindowEvent

Container Component added or removed from the container ContainerEvent

Component

Mouse pressed, released, clicked, entered, or exited MouseEvent

Mouse moved or dragged MouseEvent

Key pressed or released KeyEvent

Component moved, resized, hidden, or shown ComponentEvent

Component gained or lost focus FocusEvent

USC CSCI 201L 4/23Event-Driven Programming Overview

• Note: If a component can fire an event, any subclass of the component can fire the same type of event Every Component can fire a MouseEvent, KeyEvent, FocusEvent, and ComponentEvent since

Component is the superclass of GUI components

Page 5: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Listeners

▪ Java uses a delegation-based model for event handling› A source object fires an event› An object interested in the event, called a listener, handles it

• A listener must be an instance of a listener interface and must be registered with a source component

› From the last lecture, we saw25 JButton button2 = new JButton("2");26 button2.addActionListener(new ButtonClicked("first", outerPanel));

› And then35 class ButtonClicked implements ActionListener {36 private String numberString;37 private JPanel jp;38 public ButtonClicked(String numberString, JPanel jp) {39 this.numberString = numberString;40 this.jp = jp;41 }42 public void actionPerformed(ActionEvent ae) {43 CardLayout cl = (CardLayout)jp.getLayout();44 cl.show(jp, numberString);45 }46 }

USC CSCI 201L 5/23Event-Driven Programming Overview

Page 6: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Fired EventsEvent Class Listener Interface Listener Methods

ActionEvent ActionListener actionPerformed(ActionEvent)

ItemEvent ItemListener itemStateChanged(ItemEvent)

MouseEventMouseListener

mousePressed(MouseEvent)mouseReleased(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent)mouseClicked(MouseEvent)

MouseMotionListener mouseDragged(MouseEvent)mouseMoved(MouseEvent)

KeyEvent KeyListenerkeyPressed(KeyEvent)keyReleased(KeyEvent)keyTyped(KeyEvent)

WindowEvent WindowListener

windowClosing(WindowEvent)windowOpened(WindowEvent)windowIconified(WindowEvent)windowDeiconified(WindowEvent)windowClosed(WindowEvent)windowActivated(WindowEvent)windowDeactivated(WindowEvent)

ContainerEvent ContainerListener componentAdded(ContainerEvent)componentRemoved(ContainerEvent)

ComponentEvent ComponentListener

componentMoved(ComponentEvent)componentHidden(ComponentEvent)componentResized(ComponentEvent)componentShown(ComponentEvent)

FocusEvent FocusListener focusGained(FocusEvent)focusLost(FocusEvent)

AdjustmentEvent AdjustmentListener adjustmentValueChanged(AdjustmentEvent)

ChangeEvent ChangeListener stateChanged(ChangeEvent)

ListSelectionEvent ListSelectionListener valueChanged(ListSelectionEvent)

USC CSCI 201L 6/23Event-Driven Programming Overview

Page 7: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Outline

USC CSCI 201L 7/23

▪ Event-Driven Programming Overview▪ Event-Driven Programming Example▪ Adapter Classes▪ Program

Page 8: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

GUI with Events

USC CSCI 201L 8/23Event-Driven Programming Example

Create the following GUI

Page 9: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Event-Driven Programming Example1 import java.awt.event.ActionEvent;2 import java.awt.event.ActionListener;34 import javax.swing.BoxLayout;5 import javax.swing.JButton;6 import javax.swing.JFrame;7 import javax.swing.JLabel;8 import javax.swing.JPanel;9 import javax.swing.JTextField;10 11 public class Test extends JFrame {12 private JTextField num1TF, num2TF, totalTF;13 private JLabel number1Label, number2Label;14 private JButton concatenateButton;15 public Test() {16 super("Event-Driven Programming Example");17 number1Label = new JLabel("Number 1");18 num1TF = new JTextField("", 15);19 number2Label = new JLabel("Number 2");20 num2TF = new JTextField("", 15);21 totalTF = new JTextField("", 20);22 concatenateButton = new JButton("Concatenate");23 concatenateButton.addActionListener(24 new ConcatenateAdapter(num1TF, num2TF, totalTF));25 26 JPanel row1Panel = new JPanel();27 row1Panel.add(number1Label);28 row1Panel.add(num1TF);2930 JPanel row2Panel = new JPanel();31 row2Panel.add(number2Label);32 row2Panel.add(num2TF);33 34 JPanel row3Panel = new JPanel();35 row3Panel.add(concatenateButton);3637 JPanel row4Panel = new JPanel();38 row4Panel.add(totalTF);

USC CSCI 201L 9/23Event-Driven Programming Example

39 JPanel verticalPanel = new JPanel();40 verticalPanel.setLayout(new BoxLayout(verticalPanel, BoxLayout.Y_AXIS));41 verticalPanel.add(row1Panel);42 verticalPanel.add(row2Panel);43 verticalPanel.add(row3Panel);44 verticalPanel.add(row4Panel); 45 46 add(verticalPanel);47 setSize(250, 175);48 setLocationRelativeTo(null);49 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);50 setVisible(true);51 }52 53 public static void main(String args[]) {54 Test t = new Test();55 }56 }5758 class ConcatenateAdapter implements ActionListener {59 private JTextField num1TF, num2TF, totalTF;60 public ConcatenateAdapter(JTextField num1TF, JTextField num2TF, JTextField totalTF) {61 this.num1TF = num1TF;62 this.num2TF = num2TF;63 this.totalTF = totalTF;64 }6566 public void actionPerformed(ActionEvent ae) {67 totalTF.setText(num1TF.getText() + num2TF.getText());68 }69 }

Page 10: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Event-Driven Programming Example1 import java.awt.event.ActionEvent;2 import java.awt.event.ActionListener;34 import javax.swing.BoxLayout;5 import javax.swing.JButton;6 import javax.swing.JFrame;7 import javax.swing.JLabel;8 import javax.swing.JPanel;9 import javax.swing.JTextField;10 11 public class Test extends JFrame {12 private JTextField num1TF, num2TF, totalTF;13 private JLabel number1Label, number2Label;14 private JButton concatenateButton;15 public Test() {16 super("Event-Driven Programming Example");17 number1Label = new JLabel("Number 1");18 num1TF = new JTextField("", 15);19 number2Label = new JLabel("Number 2");20 num2TF = new JTextField("", 15);21 totalTF = new JTextField("", 20);22 concatenateButton = new JButton("Concatenate");23 concatenateButton.addActionListener(24 new ConcatenateAdapter(num1TF, num2TF, totalTF));25 26 JPanel row1Panel = new JPanel();27 row1Panel.add(number1Label);28 row1Panel.add(num1TF);2930 JPanel row2Panel = new JPanel();31 row2Panel.add(number2Label);32 row2Panel.add(num2TF);33 34 JPanel row3Panel = new JPanel();35 row3Panel.add(concatenateButton);3637 JPanel row4Panel = new JPanel();38 row4Panel.add(totalTF);

USC CSCI 201L 10/23Event-Driven Programming Example

39 JPanel verticalPanel = new JPanel();40 verticalPanel.setLayout(new BoxLayout(verticalPanel, BoxLayout.Y_AXIS));41 verticalPanel.add(row1Panel);42 verticalPanel.add(row2Panel);43 verticalPanel.add(row3Panel);44 verticalPanel.add(row4Panel); 45 46 add(verticalPanel);47 setSize(250, 175);48 setLocationRelativeTo(null);49 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);50 setVisible(true);51 }52 53 public static void main(String args[]) {54 Test t = new Test();55 }5657 class ConcatenateAdapter implements ActionListener {58 private JTextField num1TF, num2TF, totalTF;59 public ConcatenateAdapter(JTextField num1TF, JTextField num2TF, JTextField totalTF) {60 this.num1TF = num1TF;61 this.num2TF = num2TF;62 this.totalTF = totalTF;63 }6465 public void actionPerformed(ActionEvent ae) {66 totalTF.setText(num1TF.getText() + num2TF.getText());67 }68 }69 }

Page 11: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Event-Driven Programming Example1 import java.awt.event.ActionEvent;2 import java.awt.event.ActionListener;34 import javax.swing.BoxLayout;5 import javax.swing.JButton;6 import javax.swing.JFrame;7 import javax.swing.JLabel;8 import javax.swing.JPanel;9 import javax.swing.JTextField;10 11 public class Test extends JFrame {12 private JTextField num1TF, num2TF, totalTF;13 private JLabel number1Label, number2Label;14 private JButton concatenateButton;15 public Test() {16 super("Event-Driven Programming Example");17 number1Label = new JLabel("Number 1");18 num1TF = new JTextField("", 15);19 number2Label = new JLabel("Number 2");20 num2TF = new JTextField("", 15);21 totalTF = new JTextField("", 20);22 concatenateButton = new JButton("Concatenate");23 concatenateButton.addActionListener(24 new ConcatenateAdapter());25 26 JPanel row1Panel = new JPanel();27 row1Panel.add(number1Label);28 row1Panel.add(num1TF);2930 JPanel row2Panel = new JPanel();31 row2Panel.add(number2Label);32 row2Panel.add(num2TF);33 34 JPanel row3Panel = new JPanel();35 row3Panel.add(concatenateButton);3637 JPanel row4Panel = new JPanel();38 row4Panel.add(totalTF);

USC CSCI 201L 11/23Event-Driven Programming Example

39 JPanel verticalPanel = new JPanel();40 verticalPanel.setLayout(new BoxLayout(verticalPanel, BoxLayout.Y_AXIS));41 verticalPanel.add(row1Panel);42 verticalPanel.add(row2Panel);43 verticalPanel.add(row3Panel);44 verticalPanel.add(row4Panel); 45 46 add(verticalPanel);47 setSize(250, 175);48 setLocationRelativeTo(null);49 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);50 setVisible(true);51 }52 53 public static void main(String args[]) {54 Test t = new Test();55 }5657 class ConcatenateAdapter implements ActionListener {65 public void actionPerformed(ActionEvent ae) {66 Test.this.totalTF.setText(Test.this.num1TF.getText() + Test.this.num2TF.getText());67 }68 }69 }

Page 12: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Event-Driven Programming Example1 import java.awt.event.ActionEvent;2 import java.awt.event.ActionListener;34 import javax.swing.BoxLayout;5 import javax.swing.JButton;6 import javax.swing.JFrame;7 import javax.swing.JLabel;8 import javax.swing.JPanel;9 import javax.swing.JTextField;10 11 public class Test extends JFrame {12 private JTextField num1TF, num2TF, totalTF;13 private JLabel number1Label, number2Label;14 private JButton concatenateButton;15 public Test() {16 super("Event-Driven Programming Example");17 number1Label = new JLabel("Number 1");18 num1TF = new JTextField("", 15);19 number2Label = new JLabel("Number 2");20 num2TF = new JTextField("", 15);21 totalTF = new JTextField("", 20);22 concatenateButton = new JButton("Concatenate");23 concatenateButton.addActionListener(24 new ConcatenateAdapter());25 26 JPanel row1Panel = new JPanel();27 row1Panel.add(number1Label);28 row1Panel.add(num1TF);2930 JPanel row2Panel = new JPanel();31 row2Panel.add(number2Label);32 row2Panel.add(num2TF);33 34 JPanel row3Panel = new JPanel();35 row3Panel.add(concatenateButton);3637 JPanel row4Panel = new JPanel();38 row4Panel.add(totalTF);

USC CSCI 201L 12/23Event-Driven Programming Example

39 JPanel verticalPanel = new JPanel();40 verticalPanel.setLayout(new BoxLayout(verticalPanel, BoxLayout.Y_AXIS));41 verticalPanel.add(row1Panel);42 verticalPanel.add(row2Panel);43 verticalPanel.add(row3Panel);44 verticalPanel.add(row4Panel); 45 46 add(verticalPanel);47 setSize(250, 175);48 setLocationRelativeTo(null);49 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);50 setVisible(true);51 }52 53 public static void main(String args[]) {54 Test t = new Test();55 }5657 class ConcatenateAdapter implements ActionListener {65 public void actionPerformed(ActionEvent ae) {66 totalTF.setText(num1TF.getText() + num2TF.getText());67 }68 }69 }

Page 13: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Event-Driven Programming Example1 import java.awt.event.ActionEvent;2 import java.awt.event.ActionListener;34 import javax.swing.BoxLayout;5 import javax.swing.JButton;6 import javax.swing.JFrame;7 import javax.swing.JLabel;8 import javax.swing.JPanel;9 import javax.swing.JTextField;10 11 public class Test extends JFrame {12 private JTextField num1TF, num2TF, totalTF;13 private JLabel number1Label, number2Label;14 private JButton concatenateButton;15 public Test() {16 super("Event-Driven Programming Example");17 number1Label = new JLabel("Number 1");18 num1TF = new JTextField("", 15);19 number2Label = new JLabel("Number 2");20 num2TF = new JTextField("", 15);21 totalTF = new JTextField("", 20);22 concatenateButton = new JButton("Concatenate");23 class ConcatenateAdapter implements ActionListener {24 public void actionPerformed(ActionEvent ae) {25 Test.this.totalTF.setText(Test.this.num1TF.getText() + Test.this.num2TF.getText());26 }27 }28 concatenateButton.addActionListener(29 new ConcatenateAdapter());30

USC CSCI 201L 13/23Event-Driven Programming Example

31 JPanel row1Panel = new JPanel();32 row1Panel.add(number1Label);33 row1Panel.add(num1TF);3435 JPanel row2Panel = new JPanel();36 row2Panel.add(number2Label);37 row2Panel.add(num2TF);38 39 JPanel row3Panel = new JPanel();40 row3Panel.add(concatenateButton);4142 JPanel row4Panel = new JPanel();43 row4Panel.add(totalTF);44 JPanel verticalPanel = new JPanel();45 verticalPanel.setLayout(new BoxLayout(verticalPanel, BoxLayout.Y_AXIS));46 verticalPanel.add(row1Panel);47 verticalPanel.add(row2Panel);48 verticalPanel.add(row3Panel);49 verticalPanel.add(row4Panel); 50 51 add(verticalPanel);52 setSize(250, 175);53 setLocationRelativeTo(null);54 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);55 setVisible(true);56 }57 58 public static void main(String args[]) {59 Test t = new Test();60 }61 }

Page 14: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Event-Driven Programming Example1 import java.awt.event.ActionEvent;2 import java.awt.event.ActionListener;34 import javax.swing.BoxLayout;5 import javax.swing.JButton;6 import javax.swing.JFrame;7 import javax.swing.JLabel;8 import javax.swing.JPanel;9 import javax.swing.JTextField;10 11 public class Test extends JFrame {12 private JTextField num1TF, num2TF, totalTF;13 private JLabel number1Label, number2Label;14 private JButton concatenateButton;15 public Test() {16 super("Event-Driven Programming Example");17 number1Label = new JLabel("Number 1");18 num1TF = new JTextField("", 15);19 number2Label = new JLabel("Number 2");20 num2TF = new JTextField("", 15);21 totalTF = new JTextField("", 20);22 concatenateButton = new JButton("Concatenate");23 class ConcatenateAdapter implements ActionListener {24 public void actionPerformed(ActionEvent ae) {25 totalTF.setText(num1TF.getText() + num2TF.getText());26 }27 }28 concatenateButton.addActionListener(29 new ConcatenateAdapter());30

USC CSCI 201L 14/23Event-Driven Programming Example

31 JPanel row1Panel = new JPanel();32 row1Panel.add(number1Label);33 row1Panel.add(num1TF);3435 JPanel row2Panel = new JPanel();36 row2Panel.add(number2Label);37 row2Panel.add(num2TF);38 39 JPanel row3Panel = new JPanel();40 row3Panel.add(concatenateButton);4142 JPanel row4Panel = new JPanel();43 row4Panel.add(totalTF);44 JPanel verticalPanel = new JPanel();45 verticalPanel.setLayout(new BoxLayout(verticalPanel, BoxLayout.Y_AXIS));46 verticalPanel.add(row1Panel);47 verticalPanel.add(row2Panel);48 verticalPanel.add(row3Panel);49 verticalPanel.add(row4Panel); 50 51 add(verticalPanel);52 setSize(250, 175);53 setLocationRelativeTo(null);54 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);55 setVisible(true);56 }57 58 public static void main(String args[]) {59 Test t = new Test();60 }61 }

Page 15: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Event-Driven Programming Example1 import java.awt.event.ActionEvent;2 import java.awt.event.ActionListener;34 import javax.swing.BoxLayout;5 import javax.swing.JButton;6 import javax.swing.JFrame;7 import javax.swing.JLabel;8 import javax.swing.JPanel;9 import javax.swing.JTextField;10 11 public class Test extends JFrame {12 private JTextField num1TF, num2TF, totalTF;13 private JLabel number1Label, number2Label;14 private JButton concatenateButton;15 public Test() {16 super("Event-Driven Programming Example");17 number1Label = new JLabel("Number 1");18 num1TF = new JTextField("", 15);19 number2Label = new JLabel("Number 2");20 num2TF = new JTextField("", 15);21 totalTF = new JTextField("", 20);22 concatenateButton = new JButton("Concatenate");23 concatenateButton.addActionListener(new ActionListener() {24 public void actionPerformed(ActionEvent ae) {25 totalTF.setText(num1TF.getText() + num2TF.getText());26 }27 });28

USC CSCI 201L 15/23Event-Driven Programming Example

29 JPanel row1Panel = new JPanel();30 row1Panel.add(number1Label);31 row1Panel.add(num1TF);3233 JPanel row2Panel = new JPanel();34 row2Panel.add(number2Label);35 row2Panel.add(num2TF);36 37 JPanel row3Panel = new JPanel();38 row3Panel.add(concatenateButton);3940 JPanel row4Panel = new JPanel();41 row4Panel.add(totalTF);42 JPanel verticalPanel = new JPanel();43 verticalPanel.setLayout(new BoxLayout(verticalPanel, BoxLayout.Y_AXIS));44 verticalPanel.add(row1Panel);45 verticalPanel.add(row2Panel);46 verticalPanel.add(row3Panel);47 verticalPanel.add(row4Panel); 48 49 add(verticalPanel);50 setSize(250, 175);51 setLocationRelativeTo(null);52 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);53 setVisible(true);54 }55 56 public static void main(String args[]) {57 Test t = new Test();58 }59 }

Page 16: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Outline

USC CSCI 201L 16/23

▪ Event-Driven Programming Overview▪ Event-Driven Programming Example▪ Adapter Classes▪ Program

Page 17: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Listeners▪ The listeners are all interfaces, which means all of the methods in them

are abstract› Even if you only need one of the methods, you will still need to implement all

of them, though methods you don’t need would have empty bodies

USC CSCI 201L 17/23Adapter Classes

1 public class Test extends JFrame {2 public Test() {3 super("Event-Driven Programming Example");4 5 addWindowListener(new WindowListener() {6 public void windowDeiconified(WindowEvent we) {78 }9 public void windowIconified(WindowEvent we) {1011 }12 public void windowActivated(WindowEvent we) {1314 }15 public void windowDeactivated(WindowEvent we) {1617 }18 public void windowOpened(WindowEvent we) {19 System.out.println("opened");20 }21 public void windowClosing(WindowEvent we) {2223 }24 public void windowClosed(WindowEvent we) {25 System.out.println("closed");26 System.exit(1);27 }28 });

29 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);30 setSize(250, 175);31 setLocationRelativeTo(null);32 setVisible(true);33 }34 35 public static void main(String args[]) {36 Test t = new Test();37 }38 }

Page 18: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Adapters

▪ Java provides support classes, called adapters, which provide default implementations for all the methods in corresponding listener interfaces› The default implementation of a method is an empty body

with the method signature› Adapter only exist for interfaces that have more than one

method. Why?

USC CSCI 201L 18/23Adapter Classes

Page 19: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Adapter Classes

USC CSCI 201L 19/23Adapter Classes

Event Class Listener Interface Adapter Class Listener Methods

ActionEvent ActionListener actionPerformed(ActionEvent)

ItemEvent ItemListener itemStateChanged(ItemEvent)

MouseEventMouseListener MouseAdapter

mousePressed(MouseEvent)mouseReleased(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent)mouseClicked(MouseEvent)

MouseMotionListener MouseMotionAdapter mouseDragged(MouseEvent)mouseMoved(MouseEvent)

KeyEvent KeyListener KeyAdapterkeyPressed(KeyEvent)keyReleased(KeyEvent)keyTyped(KeyEvent)

WindowEvent WindowListener WindowAdapter

windowClosing(WindowEvent)windowOpened(WindowEvent)windowIconified(WindowEvent)windowDeiconified(WindowEvent)windowClosed(WindowEvent)windowActivated(WindowEvent)windowDeactivated(WindowEvent)

ContainerEvent ContainerListener ContainerAdapter componentAdded(ContainerEvent)componentRemoved(ContainerEvent)

ComponentEvent ComponentListener ComponentAdapter

componentMoved(ComponentEvent)componentHidden(ComponentEvent)componentResized(ComponentEvent)componentShown(ComponentEvent)

FocusEvent FocusListener FocusAdapter focusGained(FocusEvent)focusLost(FocusEvent)

AdjustmentEvent AdjustmentListener adjustmentValueChanged(AdjustmentEvent)

ChangeEvent ChangeListener stateChanged(ChangeEvent)

ListSelectionEvent ListSelectionListener valueChanged(ListSelectionEvent)

Page 20: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Adapter Example▪ With an adapter, we only need to override the methods that we want to

use instead of all the methods in the listener

USC CSCI 201L 20/23Adapter Classes

1 public class Test extends JFrame {2 public Test() {3 super("Event-Driven Programming Example");4 5 addWindowListener(new WindowAdapter() {6 public void windowOpened(WindowEvent we) {7 System.out.println("opened");8 }9 public void windowClosed(WindowEvent we) {10 System.out.println("closed");11 System.exit(1);12 }13 });14 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);15 setSize(250, 175);16 setLocationRelativeTo(null);17 setVisible(true);18 }19 20 public static void main(String args[]) {21 Test t = new Test();22 }23 }

Page 21: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Outline

USC CSCI 201L 21/23

▪ Event-Driven Programming Overview▪ Event-Driven Programming Example▪ Adapter Classes▪ Program

Page 22: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Program

▪ Write a program that has three text fields for reading the loan amount, annual interest rate, and number of years from the user. When the user clicks the Calculate button or hits the Enter key, calculate the amount of the loan after the number of years assuming no money is paid to the principal. Print this value in a label.› KeyEvent has a method called getKeyChar()› KeyListener has a method called keyTyped(KeyEvent)

USC CSCI 201L 22/23Program

Page 23: Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L

Program

▪ Write a program to concatenate two strings together from two text fields into a third text field when the Concatenate button is clicked.

USC CSCI 201L 23/23Program