Presentation is loading. Please wait.

Presentation is loading. Please wait.

Cs884(Prasad)java12AWT1 Abstract Windowing Toolkit Support for Graphical User Interface (Event-driven programming)

Similar presentations


Presentation on theme: "Cs884(Prasad)java12AWT1 Abstract Windowing Toolkit Support for Graphical User Interface (Event-driven programming)"— Presentation transcript:

1 cs884(Prasad)java12AWT1 Abstract Windowing Toolkit Support for Graphical User Interface (Event-driven programming)

2 cs884(Prasad)java12AWT2 Batch Programs  Interactive Programs  Graphical User Interfaces AWT –Classes for creating GUIs; organized as inheritance hierarchy. –Define the structure (geometry) and the (default) behavior of the components (“look and feel”) –Java-Components ~ X-Widgets ~ ActiveX- Controls

3 cs884(Prasad)java12AWT3 AWT classes Component: –Basic: Button, Choice, Checkbox, List, Canvas, Label, Scrollbar, etc –Container: Panel, ScrollPane, Window (Dialog, FileDialog, Frame), etc A container instance can hold component instances. LayoutManager: FlowLayout, GridLayout, BorderLayout, CardLayout, etc Automatically manage the relative positioning of the component instances within a container instance.

4 cs884(Prasad)java12AWT4 Structure Example import java.awt.*; public class DemoAwt extends Frame { Label l = new Label(“Demo”, Label.CENTER); Button b = new Button(“No Op”); Checkbox c = new Checkbox(“WindowsNT”); List li = new List(); … constructor definition... public static void main (String[] argv) { new DemoAwt(); }

5 cs884(Prasad)java12AWT5 {... DemoAwt() { resize(200,300); setLayout(new FlowLayout()); add(l); add(b); add(new TextField(“TEXT”) ); add(c); add(li); li.addItem(“Netcape”); li.addItem(“SUN”); show();...}

6 cs884(Prasad)java12AWT6 {... DemoAwt() { resize(250,150); setLayout(new BorderLayout()); // default add(“North”,l); add(“South”,b); add(“Center”, new TextField(“T”)); add(“East”,c); add(“West”,li); li.addItem(“Netcape”); li.addItem(“SUN”); show();...}

7 cs884(Prasad)java12AWT7 Applet Version import java.awt.*; import java.applet.*; public class DemoAwt2 extends Applet { … init-code... public void start() { show(); } public void stop() { hide(); }

8 cs884(Prasad)java12AWT8 public void init() { List li = new List(); li.addItem(“Netcape”); li.addItem(“SUN”); add(new Label(“Demo”)); add(new Button(“No Op”)); add(new Checkbox(“WindowsNT”)); add(li); } /* */

9 cs884(Prasad)java12AWT9 Adding Behavior : Event Model An event, such as mouse click, mouse motion, keyboard input, etc, associated with a component, can trigger a specific (event handler) method. Event instance fields id, target, x, y, when, key, modifier, etc. An event model specifies the protocol used to process/handle events.

10 cs884(Prasad)java12AWT10 Role of inheritance hierarchy –To associate an event-handler with a component class, it must be sub-classed, to override the default handler. Role of containment hierarchy – If an event-handler associated with the target returns true, then the event has been processed. Otherwise, the event is propagated to its container, for further processing. Java 1.0 Event Model

11 cs884(Prasad)java12AWT11 Problems Code Organization –Proliferation of sub-classes. –Complex switch in the top-level handleEvent (). No clear separation between application code and the GUI. Efficiency –No filtering of events. (Events delivered to a component even when an event is not handled.)

12 cs884(Prasad)java12AWT12 Delegation-based Model –Event object propagated from source to listener by invoking an event-specific method on a listener. –The listener implements an appropriate EventListener interface, and registers itself with the source. Event model for Java 1.1 and Beans sourcelistener event

13 cs884(Prasad)java12AWT13 OO-Events – java.awt.events.* – class java.util.EventObject – interface java.util.EventListener “Design Pattern” –event type EVevent –interface EVListener –source. addEVListener (target) –source. setEVListener (target) –target implements EVListener –class EVAdapter Source can safely call any method in the interface on all (corresponding) listener targets.

14 cs884(Prasad)java12AWT14 import java.applet.*; import java.awt.*; import java.awt.event.*; public class Scribble11 extends Applet implements MouseListener, MouseMotionListener { int oldX, oldY; Graphics g; …init()... public void mousePressed(MouseEvent e) { oldX = e.getX(); oldY = e.getY(); } public void mouseReleased(MouseEvent e){} public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseMoved(MouseEvent e){} public void mouseDragged(MouseEvent e) { g.drawLine( oldX, oldY, e.getX(), getY()); }}

15 cs884(Prasad)java12AWT15 public void init(){ g = getGraphics(); addMouseListener(this); addMouseMotionListener(this); Button bgB = new Button("Change Color"); bgB.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setBackground( newColor()); repaint(); } } ); add(bgB); Button clearB = new Button("Clear"); clearB.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Color c = g.getColor(); g.setColor(getBackground()); g.fillRect(0, 0, bounds().width, bounds().height); g.setColor(c);} } ; add(clearB); }

16 cs884(Prasad)java12AWT16 import java.applet.*; import java.awt.*; import java.awt.event.*; public class Scribble22 extends Applet { int oldX, oldY; Graphics g; public void init() { g = getGraphics(); addMouseListener( new MouseAdapter() { public void mousePressed(MouseEvent e) { oldX = e.getX(); oldY = e.getY(); } } ); addMouseMotionListener( new MouseMotionAdapter (){ public void mouseDragged(MouseEvent e) { g.drawLine( oldX, oldY, e.getX(), e.getY()); } } );

17 cs884(Prasad)java12AWT17 Button bgB = new Button("Change Color"); bgB.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setBackground( newColor()); repaint(); } } ); add(bgB); Button clearB = new Button("Clear"); clearB.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Color c = g.getColor(); g.setColor(getBackground()); g.fillRect(0, 0, bounds().width, bounds().height); g.setColor(c);} } ; add(clearB); }

18

19 cs884(Prasad)java12AWT19

20 cs884(Prasad)java12AWT20

21 cs884(Prasad)java12AWT21

22 cs884(Prasad)java12AWT22

23 cs884(Prasad)java12AWT23 Advantages Flexible source-listener association dynamic. 1-1, 1-n, n-1, n-m source-listener combinations. Efficient Event-filtering: Deliver only to registered listeners. Separation of Application and GUI code Enable (tool builders) run-time discovery of events that a component generates/observes.

24 cs884(Prasad)java12AWT24 Low-level Event Handling One can subclass a component, to process events, by overriding the following methods: –protected void processEvent(AWTEvent); –protected void processEV?Event(EV?Event); These are analogous to Java 1.0 handleEvent() and specific event-handlers respectively. It is necessary to enable delivery of events using: –protected void enableEvents(long eventsToEnable ); Note: one cannot mix 1.0 and 1.1 event models.

25 cs884(Prasad)java12AWT25 import java.applet.*; import java.awt.*; import java.awt.event.*; public class Scribble33 extends Applet { int oldX, oldY; Graphics g; public void init() { add( new Label("Scribbler: Press 'c' to clear.") ); g = getGraphics(); enableEvents(AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK | AWTEvent.KEY_EVENT_MASK); requestFocus(); }

26 cs884(Prasad)java12AWT26 public void processMouseEvent(MouseEvent e) { if (e.getID() == MouseEvent.MOUSE_PRESSED) { oldX = e.getX(); oldY = e.getY(); } else super.processMouseEvent(e); } public void processMouseMotionEvent(MouseEvent e) { if (e.getID() == MouseEvent.MOUSE_DRAGGED) { int x = e.getX(); int y = e.getY(); g.drawLine(oldX,oldY,x,y); oldX = x; oldY = y; } else super.processMouseMotionEvent(e); }

27 cs884(Prasad)java12AWT27 public void processKeyEvent(KeyEvent e) { if ( (e.getID() == KeyEvent.KEY_TYPED) && (e.getKeyChar() == 'c') ) { Color temp = g.getColor(); g.setColor(getBackground()); g.fillRect(0, 0, getSize().width, getSize().height); g.setColor(temp); } else super.processKeyEvent(e); }


Download ppt "Cs884(Prasad)java12AWT1 Abstract Windowing Toolkit Support for Graphical User Interface (Event-driven programming)"

Similar presentations


Ads by Google