1 / 27

Abstract Windowing Toolkit

Abstract Windowing Toolkit. Support for Graphical User Interface (Event-driven programming). Batch Programs -> Interactive Programs => Graphical User Interfaces AWT Classes for creating GUIs; organized as inheritance hierarchy.

quin-king
Download Presentation

Abstract Windowing Toolkit

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Abstract Windowing Toolkit Support for Graphical User Interface (Event-driven programming) java12AWT

  2. 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 java12AWT

  3. 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. java12AWT

  4. 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(); } } java12AWT

  5. { ... 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(); ...} java12AWT

  6. { ... 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(); ...} java12AWT

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

  8. 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); } /* <applet code=DemoAwt2 width=250 height=300> </applet> */ java12AWT

  9. 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 instancefields id, target, x, y, when, key, modifier, etc. • An event model specifies the protocol used to process/handle events. java12AWT

  10. Java 1.0 Event Model • Role of inheritancehierarchy • 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. java12AWT

  11. 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.) java12AWT

  12. Event model for Java 1.1 and Beans • 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 source listener java12AWT

  13. OO-Events • java.awt.events.* • class java.util.EventObject • interface java.util.EventListener • “Design Pattern” • event type EVevent • interfaceEVListener • source. addEVListener (target) • source. setEVListener (target) • targetimplements EVListener • classEVAdapter Source can safely call any method in the interface on all (corresponding) listener targets. java12AWT

  14. 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()); }} java12AWT

  15. 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); } java12AWT

  16. 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()); } } ); java12AWT

  17. 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); } java12AWT

  18. java12AWT

  19. java12AWT

  20. java12AWT

  21. java12AWT

  22. 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. java12AWT

  23. 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 toJava 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. java12AWT

  24. 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(); } java12AWT

  25. 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); } java12AWT

  26. 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); } } java12AWT

More Related