Title: Chapter 6: Events in Java
1Chapter 6 Events in Java
- 1.0 Model
- Event class
- selecting component to handle
- handleEvent method
- helper methods (action, keyUp, mouseUp, etc.)
- 1.1 Model
- Listeners - connected to Event generatorsEvent
types ActionEvent, ItemEvent, etc. - corresponding Listeners ActionListener, etc.
- connecting generator to listener
- Interfaces and Adapters
2Abstract Classes
- Class may be abstract by adding modifier in class
header - public abstract class MyClass
- Resulting class cannot be instantiated
- Used to create general classes (Car) that you
expect to specialize
3Interfaces
- A class may only inherit from one parent
- Sometimes want to create specialized class,
combines several capabilities - Interface is a list of methods to instantiate
- public interface Drawable
- public void draw() // empty body
-
- Class header, indicate implements interface
- public class Rect extend GObj implements
Drawable - must implement all methods of interface
- may have more than one interface
4Event-Driven Programming
- Input events by the user caught by Java
- move mouse, click button, scroll window, type key
- For each, Java creates an Event object
- Object added to queue, your program is then
expected to handle the events
51.0 Event Model
- Event object
- instance vars
- Object target - which object generated the event
- int id - a value indicating the type of event
- Object arg - useful info about the event
(dependent) - long when - time of event
- int x - x location of event
- int y - y location of event
- int clickCount - number of times button clicked
- int key - key pressed (for key events)
- int modifiers - for key and mouse events
6Event id Constants
- ACTION_EVENT - Buttons, Checkboxes, Choices,
Lists, MenuItems, TextFields - KEY_PRESS, KEY_RELEASE, KEY_ACTION,
KEY_ACTION_RELEASE - MOUSE_DOWN, MOUSE_UP, MOUSE_DRAG, MOUSE_MOVE,
MOUSE_ENTER, MOUSE_EXIT - mouse - LIST_SELECT, LIST_DESELECT - List events
- SCROLL_ABSOLUTE, SCROLL_LINE_UP,
SCROLL_LINE_DOWN, SCROLL_PAGE_UP,
SCROLL_PAGE_DOWN - WINDOW_EXPOSE, WINDOW_ICONIFY, WINDOW_DEICONIFY,
WINDOW_DESTROY, WINDOW_MOVED - LOAD_FILE, SAVE_FILE
- GOT_FOCUS, LOST_FOCUS
7Handling Events
- Java does lots of stuff for you (keys in Text
objects, window moves, etc.) - You add handling events for things you want
handled a particular way, or when no obvious
method (what to do when button pushed)
8Source of the Event
- Java sends event to Component it thinks is
responsible - Component should
- handle event and stop
- pass event its parent class
- say it cant handle event (pass to parent in GUI)
- handle event and pass on (rare)
- Java will automatically pass event to parent in
GUI hierarchy if not handled - for Button, Comp (e.g. Panel) contains Button
9Event-Handling Methods
- Every component has handleEvent method
- public boolean handleEvent(Event e)
- if (e.id Event.WINDOW_DESTROY)
- System.exit(0)
- return true
-
- Return value indicates if handled
- true - event handled, terminate
- false - event not completely handled, try someone
else (parent in GUI hierarchy)
10Passing On Events
- Sometimes we handle some events, want to pass it
on to others - public boolean handleEvent(Event e)
- if (e.id Event.WINDOW_DESTROY)
- else
- return super.handleEvent(e)
-
- Give the next Component up in the class hierarchy
the chance to handle event
11Helper Methods
- handleEvent rarely used
- Java provides helper methods specific to
particular types of events - can be implemented instead of handleEvent
- called after handleEvent tried
- action events - actions
- key events - keyDown, keyUp
- mouse events - mouseDown, mouseUp, mouseDrag,
mouseMove, mouseEnter, mouseExit
12action Method
- form
- public boolean action (Event e, Object arg)
- used for many widgets
- Button
- e.target is button obj, arg is string name of
button - Checkbox
- e.target is Cb obj, arg is check value (true or
false) - Choice, List
- e.target is choice obj, arg is string of choice
made
13Helper Calling Parent
- As with handleEvent, if helper fails to handle
event, should call superclass action - return super.action(e,arg)
- Return values have same meaning as in handleEvent
14key Methods
- form
- public boolean keyUp (Event e, int key)
- public boolean keyDown(Event e, int key)
- key is char pressed
- modifiers field indicates if Shift, Alt, Meta, or
Control held while pressed - check with constants SHIFT_MASK, META_MASK,
CONTROL_MASK - (e.modifiers Event.SHIFT_MASK) or e.shiftDown()
- also has metaDown and controlDown, but none for
Alt - other keys (Functions like F1) use Action Key
events, Java has constants for such (Event.F1)
15mouse Methods
- form
- public boolean method(Event e, int x, int y)
- methods mouseUp, mouseDown, mouseMove,
mouseDrag, mouseEnter, mouseExit - x, y are locations of occurrence
- modifiers used to indicate if left, right, center
- no modifiers left
- meta set right
- alt set center
16import java.applet. import java.awt. public
class TestAction extends Applet Button button
new Button("AButton") Checkbox cbox1 new
Checkbox("CB1") Checkbox cbox2 new
Checkbox("CB2") CheckboxGroup cbg new
CheckboxGroup() Choice choice new Choice()
Panel panel new Panel() MyCanvas canvas
new MyCanvas() public void init ()
panel.setLayout(new GridLayout(2,2))
cbox1.setCheckboxGroup(cbg)
cbox2.setCheckboxGroup(cbg)
choice.addItem("Item1") choice.addItem("Item2
") choice.addItem("Item3")
panel.add(cbox1) panel.add(cbox2)
panel.add(button) panel.add(choice)
panel.layout() setLayout(new
GridLayout(2,1)) add(panel)
add(canvas)
17 public boolean action (Event e, Object arg)
if (e.target button)
canvas.setMessage(arg " pressed")
else if ((e.target cbox1) (e.target
cbox2)) Checkbox tempcb (Checkbox)
e.target canvas.setMessage(tempcb.getLabel(
) " checked") else if (e.target
choice) canvas.setMessage(arg "
chosen") return true class
MyCanvas extends Canvas private String
theMessage public MyCanvas()
resize(500,40) public void paint(Graphics
g) g.drawString(theMessage,10,30)
public void setMessage(String s) theMessage
s repaint()
181.0 to the 1.1 Delegation Model
- Event generators tend to be scattered in 1.0
- Handlers often centralized
- Difficult to write good general handlers
- Idea connect generators with appropriate handlers
19The Delegation Model (1.1)
- Any object can be a source of an Event
- Any object can listen for events
- implement (register) an appropriate listener
interface - listeners stay close to generators
- Need to import java.awt.event.
20- General methods
- Object getSource() - generator of event, from
EventObject - int getID() - constant for type of event (useful
for some Mouse or Key events) - from AWTEvent
21Handling Events
- For different types of events we have
- an Event class (with useful methods)
- an EventListener interface with
- required methods that must be implemented as part
of listener - after creating instance of class that can
generate events, connect to appropriate listener
interface - use addListenerType(Object generator) methods
22Action Events
- click Button, double-click member in List, select
MenuItem, press ltentergt in TextField - ActionEvent methods
- String getActionCommand() - string for source
- button - label
- list, menuitems - text of selected item
- textfield - content of textfield
- int getModifiers() - use to check if modifiers
set - Listener ActionListener
- methods void actionPerformed(ActionEvent e)
23Item Events
- Select Checkbox, CheckboxMenuItem, Choice item,
or single-click List item - ItemEvent methods
- Object getItem() - item selected (usually String)
- int getStateChange() - returns value of state
- ItemEvent.SELECTED or ItemEvent.DESELECTED
- ItemSelectable getItemSelectable() - return
ItemSelectable object that generated event - Listener ItemListener
- methods void itemStateChanged(ItemEvent e)
24Input Events
- Abstract class for Key and Mouse Events
- Has constants for masks ALT_MASK, etc.
- Also has boolean methods
- boolean isAltDown()
- boolean isControlDown()
- boolean isMetaDown()
- boolean isShiftDown()
- Other method int getModifiers()
25Mouse Events
- MouseEvent, MouseMovedEvent methods
- int getX() - x location of mouse event
- int getY() - y location of mouse event
- Point getPoint() - x,y location
- int getClickCount() - number of clicks
- Listeners
- MouseListener - for click, press, enter, exits
- methods
- void mouseClicked(MouseEvent e)
- mousePressed, mouseReleased, mouseEntered,
mouseExited - MouseMotionListener - for drag, move
- methods
- void mouseMoved(MouseMovedEvent e)
- void mouseDragged(MouseMovedEvent e)
26Key Events
- KeyEvent methods
- char getKeyChar() - char of key pressed
- boolean isActionKey() - true if action key
- int getKeyCode() - code for action keys
- void setKeyChar(char c) - set char in event
- void setKeyCode(int keyCode) - set keyCode
- Listener KeyListener
- Methods
- void keyPressed(KeyEvent e)
- void keyReleased(KeyEvent e)
- void keyTyped(KeyEvent e)
27Text Events
- Changes to TextField or TextArea
- Listener TextListener
- methods void textValueChanged(TextEvent e)
28Adapters
- To implement an interface you must implement ALL
methods of interface - even if only an empty method
- Alternate solution extend an Adapter (interface
with empty methods) - MouseAdapter
- MouseMotionAdapter
- KeyAdapter
29General Use of Listener
- in declaring generator
- private Widget myWidget new Widget()
- private ApropListClass myListener
- in init or constructor
- myListener new ApropListClass(myWidget)
- myWidget.addApropListener(myListener)
- new class
- class ApropListClass implements ApropListener
- private Widget copyWidget
- public ApropListClass(Widget w)
- copyWidget w
-
- public void apropListenerMethod(Item e)
- // implement
-
-
30import java.applet. import java.awt. import
java.awt.event. public class TestAction
extends Applet Button button new
Button("AButton") private AButtonListener
myButtonListener Checkbox cbox1 new
Checkbox("CB1") private ACheckboxListener
myCB1Listener Checkbox cbox2 new
Checkbox("CB2") private ACheckboxListener
myCB2Listener CheckboxGroup cbg new
CheckboxGroup() Choice choice new Choice()
private AChoiceListener myChoiceListener
Panel panel new Panel() MyCanvas canvas
new MyCanvas()
31 public void init () myButtonListener
new AButtonListener(button,canvas)
button.addActionListener(myButtonListener)
myCB1Listener new ACheckboxListener(cbox1,canvas
) cbox1.addItemListener(myCB1Listener)
myCB2Listener new ACheckboxListener(cbox2,canvas
) cbox2.addItemListener(myCB2Listener)
myChoiceListener new AChoiceListener(choice,canv
as) choice.addItemListener(myChoiceListener)
panel.setLayout(new GridLayout(2,2))
cbox1.setCheckboxGroup(cbg)
cbox2.setCheckboxGroup(cbg)
choice.addItem("Item1") choice.addItem("Item2
") choice.addItem("Item3")
panel.add(cbox1) panel.add(cbox2)
panel.add(button) panel.add(choice)
panel.validate() setLayout(new
GridLayout(2,1)) add(panel)
add(canvas)
32class AButtonListener implements ActionListener
Button buttonCopy MyCanvas canvasCopy
public AButtonListener(Button bcopy, MyCanvas
ccopy) buttonCopy bcopy canvasCopy
ccopy public void actionPerformed(ActionEv
ent e) canvasCopy.setMessage(buttonCopy.getLa
bel() " pressed") class
ACheckboxListener implements ItemListener
Checkbox checkboxCopy MyCanvas canvasCopy
public ACheckboxListener(Checkbox cbcopy,
MyCanvas ccopy) checkboxCopy cbcopy
canvasCopy ccopy public void
itemStateChanged(ItemEvent e)
canvasCopy.setMessage(checkboxCopy.getLabel()
checked")
33class AChoiceListener implements ItemListener
Choice choiceCopy MyCanvas canvasCopy
public AChoiceListener(Choice chcopy, MyCanvas
ccopy) choiceCopy chcopy canvasCopy
ccopy public void itemStateChanged(ItemE
vent e) canvasCopy.setMessage(choiceCopy.getS
electedItem() chosen") class MyCanvas
extends Canvas private String theMessage
"" public MyCanvas() setSize(500,40)
public void paint(Graphics g)
g.drawString(theMessage,10,30) public void
setMessage(String s) theMessage s
repaint()