Presentation is loading. Please wait.

Presentation is loading. Please wait.

Events in Java Swing Chris North cs3724: HCI. Typical command line program Non-interactive Linear execution program: main() { code; }

Similar presentations


Presentation on theme: "Events in Java Swing Chris North cs3724: HCI. Typical command line program Non-interactive Linear execution program: main() { code; }"— Presentation transcript:

1 Events in Java Swing Chris North cs3724: HCI

2 Typical command line program Non-interactive Linear execution program: main() { code; }

3 Interactive command line program User input commands Non-linear execution Unpredictable order Much idle time program: main() { decl data storage; initialization code; loop { get command; switch(command) { command1: code; command2: code; … }

4 Typical GUI program GUI program: main() { decl data storage; initialization code; create GUI; register callbacks; main event loop; } Callback1()//button1 press {code; } Callback2() {code; } … User input commands Non-linear execution Unpredictable order Much idle time Event callback procs

5 GUI Events Window System event loop App1 OK Cancel App2 code: OKbtn_click() { do stuff; } OKbtn_mouseover() { do more stuff; } CancelBtn_click() { do different stuff; } mouse click input device App1 event loop App2 event loop which app? which callback? App2 OK Cancel

6 Java Swing program Java program: Class{ main() { decl data storage; initialization code; create GUI objects; register listeners; } listener1() {do stuff; } listener2() {do stuff; } … Event loop automatic in separate thread

7 Example Example: draw program MyDrawClass{ main() { DataStruct drawn_shapes; drawn_shapes.clear(); create Frame, Panel, buttons, … register listeners; } DrawPanel_listener_click() {drawn_shapes.add(new shape); } UndoButton_listener_click() {drawn_shapes.deleteLast(); } …

8 Java Listeners 1.Register with a component to receive events Give component a ref to your Listener object JButton1.addMouseListener(new myMouseListener) 2.Receive events from component Component will call callback procs on your Listener object myMouseListener.mouseClicked(event) JButton1 myMouse- Listener click 2. mouseClicked( ) 1. addMouseListener( )

9 Listener API Listeners must inherit from Java Listener base classes ActionListener, KeyListener, MouseListener, MouseMotionListener, WindowListener, … Abstract base classes: xxxxListener Stubbed base classes: xxxxAdapter MouseListener: mouseClicked(), mouseEntered(), mouseExited(), mousePressed(), mouseReleased()

10 Code button1 = new JButton(“press me”); myListener = new myListenClass; button1.addMouseListener(myListener); // extending a class (“subclassing”): class myListenClass extends MouseAdapter { public void mouseClicked(MouseEvent e){ // button clicked, do stuff here } // OR “implementing an interface”: class myListenClass implements MouseListener { public void mouseClicked(MouseEvent e){ // button clicked, do stuff here } … } An abstract base class (methods, no code)

11 Event objects mouseClicked(MouseEvent e) MouseEvent: getX( ), getY( ), getClickCount( ), getSource( ), … For each listener type: Component.addxxxxListener( ) xxxxListener abstract base class xxxxAdapter stubbed base class xxxxEvent

12 Inheritance with Swing class myPanel extends JPanel { public myPanel(){//constructor // create buttons, … } public void paintComponent(Graphics g){ super.paint(g); //call overriden method // paint stuff here } myPanel creates JPanel via inheritance Override JPanel methods to add functionality

13 Simplifying: Implements class myPanel extends JPanel implements MouseListener { public myPanel(){//constructor button1 = new JButton(“press me”); button1.addMouseListener(this); add(button1); } public void mouseClicked(MouseEvent e){ // button clicked, do stuff here } … } abstract base class

14 Simplifying: Anonymous classes class myPanel extends JPanel { public myPanel(){ button1 = new JButton(“press me”); button1.addMouseListener( new MouseAdapter() { public void mouseClicked(MouseEvent e){ // button clicked, do stuff here } ); add(button1); } Defining and instantiating a class on the fly

15 In JBuilder Application JFrame, JPanel, JButton Layout managers Event listeners

16 Homework #3 Painter Applet


Download ppt "Events in Java Swing Chris North cs3724: HCI. Typical command line program Non-interactive Linear execution program: main() { code; }"

Similar presentations


Ads by Google