Title: Events in Java Swing
1Events in Java Swing
2Typical command line program
- Non-interactive
- Linear execution
program main() code code code code co
de code code code code code code cod
e
3Interactive command line program
program main() decl data storage initializa
tion code loop get command switch(comm
and) command1 code command2 c
ode
- User input commands
- Non-linear execution
- Unpredictable order
- Much idle time
4Typical GUI program
GUI program main() decl data
storage initialization code create
GUI register callbacks main event
loop Callback1() //button1 press code Cal
lback2() code
- User input commands
- Non-linear execution
- Unpredictable order
- Much idle time
- Event callback procs
5GUI Events
App1
App2
mouseclick
OK
OK
Cancel
Cancel
App2 code OKbtn_click() do
stuff OKbtn_mouseover() do more
stuff CancelBtn_click() do different
stuff
App1 event loop
WindowSystem event loop
App2 event loop
whichapp?
inputdevice
whichcallback?
6Java Swing program
Java program Class main() decl data
storage initialization code create GUI
objects register listeners listener1() do
stuff listener2() do stuff
- Event loop automaticin separate thread
7Example
Example draw program MyDrawClass main() Dat
aStruct drawn_shapes drawn_shapes.clear() c
reate Frame, Panel, buttons, register
listeners DrawPanel_listener_click() drawn_s
hapes.add(new shape) UndoButton_listener_click(
) drawn_shapes.deleteLast()
8Java Listeners
- Register with a component to receive events
- Give component a ref to your Listener object
- JButton1.addMouseListener(new myMouseListener)
- Receive events from component
- Component will call callback procs on your
Listener object - myMouseListener.mouseClicked(event)
click
JButton1
1. addMouseListener( )
2. mouseClicked( )
myMouse-Listener
9Listener 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()
10Code
- 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)
11Event objects
- mouseClicked(MouseEvent e)
- MouseEvent
- getX( ), getY( ), getClickCount( ), getSource( ),
- For each listener type
- Component.addxxxxListener( )
- xxxxListener abstract base class
- xxxxAdapter stubbed base class
- xxxxEvent
12Inheritance 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
13Simplifying Implements
abstract base class
- 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
-
-
-
14Simplifying 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
15In JBuilder
- Application
- JFrame, JPanel, JButton
- Layout managers
- Event listeners
16Homework 3