Abstract Windowing Toolkit - PowerPoint PPT Presentation

About This Presentation
Title:

Abstract Windowing Toolkit

Description:

Classes for creating GUIs; organized as inheritance hierarchy. ... Basic: Button, Choice, Checkbox, List, Canvas, Label, Scrollbar, etc ... – PowerPoint PPT presentation

Number of Views:39
Avg rating:3.0/5.0
Slides: 28
Provided by: TKPr6
Learn more at: http://cecs.wright.edu
Category:

less

Transcript and Presenter's Notes

Title: Abstract Windowing Toolkit


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

2
  • Batch Programs -gt Interactive Programs
  • gt 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
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
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
  • ...
  • 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
  • ...
  • 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
Applet Version
  • import java.awt.
  • import java.applet.
  • public class DemoAwt2 extends Applet
  • init-code...
  • public void start()
  • show()
  • public void stop()
  • hide()

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)
  • / ltapplet codeDemoAwt2 width250 height300gt
  • lt/appletgt
  • /

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

10
Java 1.0 Event Model
  • 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.

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

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
13
  • 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
  • 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
  • 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(getBac
    kground())
  • g.fillRect(0, 0, bounds().width,
    bounds().height)
  • g.setColor(c)
  • add(clearB)

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())
  • )

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(getBac
    kground())
  • g.fillRect(0, 0, bounds().width,
    bounds().height)
  • g.setColor(c)
  • add(clearB)

18
(No Transcript)
19
(No Transcript)
20
(No Transcript)
21
(No Transcript)
22
(No Transcript)
23
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
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
  • 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_EVE
    NT_MASK
  • AWTEvent.KEY_EVENT_MASK)
  • requestFocus()

26
  • public void processMouseEvent(MouseEvent e)
  • if (e.getID() MouseEvent.MOUSE_PRES
    SED)
  • oldX e.getX() oldY e.getY()
  • else super.processMouseEvent(e)
  • public void processMouseMotionEvent(MouseEvent
    e)
  • if (e.getID() MouseEvent.MOUSE_DRAG
    GED)
  • int x e.getX()
    int y e.getY()
  • g.drawLine(oldX,oldY,x,y)
  • oldX x oldY y
  • else super.processMouseMotionEvent(e
    )

27
  • 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)
Write a Comment
User Comments (0)
About PowerShow.com