Event Handling

12
Event Handling Feb 14, 2000

description

Event Handling. Feb 14, 2000. Event Model Revisited. Recall that a component can fire an event. Each type of event is defined as a distinct class. An event is received by one or more listeners . - PowerPoint PPT Presentation

Transcript of Event Handling

Page 1: Event Handling

Event Handling

Feb 14, 2000

Page 2: Event Handling

Event Model RevisitedRecall that a component can fire an event.Each type of event is defined as a distinct class.An event is received by one or more listeners. An event listener is an object of a class which

implements particular type of listener interface

Since a class can implement multiple interfaces, an object can act on multiple events of different types.

To receive an event of particular type, we only need to register with the component that fire the event.

Page 3: Event Handling

Event Hierarchy

java.util.EventObject

java.awt.AWTEvent

java.awt.event.ComponentEvent

java.awt.event.FocusEvent

java.awt.event.KeyEvent

java.awt.event.MouseEvent

java.awt.event.AdjustmentEvent

java.awt.event.WindowEvent

java.awt.event.ActionEvent

java.awt.event.ItemEvent

java.awt.event.TextEvent

Page 4: Event Handling

import java.awt.*;import java.awt.event.*;import javax.swing.*;

public class ButtonDemo implements ActionListener { Container pane;

ButtonDemo() { JFrame frame =

new JFrame("Button Demo"); pane = frame.getContentPane(); pane.setLayout(new GridLayout(5,3)); addButtons(); frame.pack(); frame.setSize(300,200); frame.setVisible(true); }

// place addButtons() here!!!

public void actionPerformed(ActionEvent event) {

String command = event.getActionCommand(); System.out.println(command); }

public static void main(String args[]) { new ButtonDemo(); }}

private void addButtons() { for (int i=0; i<10; i++) { JButton jb = new JButton(""+i); jb.addActionListener(this); pane.add(jb); }

JButton jo = new JButton("+"); jo.addActionListener(this); pane.add(jo);

jo = new JButton("-"); jo.addActionListener(this); pane.add(jo);

jo = new JButton("*"); jo.addActionListener(this); pane.add(jo);

jo = new JButton("/"); jo.addActionListener(this); pane.add(jo);

jo = new JButton("AC"); jo.addActionListener(this); pane.add(jo);}

Page 5: Event Handling

Different Ways to Handle Events

Directly implements a listener interface of interest.

Use an inner class that implements a listener interface of interest.

Use a listener adapter class, which is an abstract class. (We must override its methods)

Quite often, anonymous class will be useful!!! Anonymous class can be both listener inner

class or listener adapter class.

Page 6: Event Handling

import java.awt.*;import java.awt.event.*;import javax.swing.*;

public class ButtonDemo { Container pane;

ButtonDemo() { JFrame frame =

new JFrame("Button Demo"); pane = frame.getContentPane(); pane.setLayout(new GridLayout(5,3)); addButtons(); frame.pack(); frame.setSize(300,200); frame.setVisible(true); }

// place addButtons() here!!!

// add ButtonListener inner class here. public static void main(String args[]) { new ButtonDemo(); }}

class ButtonListener implements ActionListener {

public void actionPerformed(ActionEvent event) {

String command = event.getActionCommand(); System.out.println(command); }}

private void addButtons() { ButtonListener blt = new ButtonListener(); … … …

Jbutton jo = new JButton("AC"); jo.addActionListener(blt); pane.add(jo);}

Page 7: Event Handling

Listener AdaptersUsually we are not interested in all the

methods defined in some listener interface.However, to use an interface we need to

implement all the methods in it. (Annoying!!!)

Adapters are abstract classes that already implements particular listener interface.

Actually no method in adapter class is an abstract method. Adapter class is just defined as abstract to force user to override particular method of interest.

Page 8: Event Handling

void windowActivated(WindowEvent ev);

void windowClosing(WindowEvent ev);

void windowDeactivated(WindowEvent ev);

… … …

void windowOpened(WindowEvent ev);

WindowListener Interface

void windowActivated(WindowEvent ev) {}

void windowClosing(WindowEvent ev){}

void windowDeactivated(WindowEventev){}

… … …

void windowOpened(WindowEvent ev){}

WindowAdapter class

implements

extends

void windowClosing(WindowEent ev) {

System

.exit(0);

}

Overrides only onemethod of interest

Page 9: Event Handling

import java.awt.*;import java.awt.event.*;import javax.swing.*;

public class ButtonDemo { Container pane;

ButtonDemo() { JFrame frame =

new JFrame("Button Demo"); pane = frame.getContentPane(); pane.setLayout(new GridLayout(5,3)); addButtons(); Closer closer = new Closer(); frame.addWindowListener(closer); frame.pack(); frame.setSize(300,200); frame.setVisible(true); }

// place addButtons() here!!!

// add ButtonListener inner class here.

// add Closer class here!!! public static void main(String args[]) { new ButtonDemo(); }}

class Closer extend WindowAdapter { public void windowClosing( WindowEvent ev) { System.exit(0); }}

Page 10: Event Handling

Shortcut to Use Adapters(Anonymous Class)

… … ...

public class ButtonDemo { Container pane;

ButtonDemo() { … … …

frame.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent evt) { System.exit(0); } } )

… ... }

… … ...}

No object handle is defined!!!

Page 11: Event Handling

import java.awt.*;import java.awt.event.*;import javax.swing.*;

public class PaintDemo { PaintDemo(){ JFrame frame = new JFrame("PaintDemo"); frame.setSize(400,300); DrawingCanvas canvas = new DrawingCanvas();

Container pane = frame.getContentPane();

pane.add(canvas,"Center"); frame.addWindowListener(

new WindowAdapter() { public void

windowClosing( WindowEvent evt) {

System.exit(0); } }

);

frame.setVisible(true); }

// PaintDemo Continues

public static void main(String args[])

{

new PaintDemo();

}

} // End of PaintDemo

Page 12: Event Handling

class DrawingCanvas extends JPanel { int last_x,last_y; int cur_x,cur_y;

DrawingCanvas() { setSize(getPreferredSize()); addMouseListener(

new MouseAdapter() { public void

mousePressed(MouseEvent evt) {last_x = evt.getX();last_y = evt.getY();

} }

);

addMouseMotionListener( new MouseMotionAdapter() { public void

mouseDragged(MouseEvent evt) { cur_x = evt.getX(); cur_y = evt.getY(); Graphics g = getGraphics()

g.drawLine(last_x,last_y, cur_x,cur_y);

last_x = cur_x; last_y = cur_y; } }

); }}