Download presentation
Presentation is loading. Please wait.
Published bySuzan McDaniel Modified over 9 years ago
1
CS102 – GUI AWT & Swing Components & Containers, Layout Managers, Events & Listeners MVC design pattern. David Davenport
2
IMPORTANT… Students… This presentation is designed to be used in class as part of a guided discovery sequence. It is not self- explanatory! Please use it only for revision purposes after having taken the class. Simply flicking through the slides will teach you nothing. You must be actively thinking, doing and questioning to learn! Instructors… You are free to use this presentation in your classes and to make any modifications to it that you wish. All I ask is an email saying where and when it is/was used. I would also appreciate any suggestions you may have for improving it. thank you, David. David
3
Programming forms F Conventional/Procedural programming F code is always executed in same sequence. characterised by input/process/output F Event-driven programming F code is executed upon activation of events. sequence changes depending on order of events method 1 method 2 method 3 -------- method n method 1 method 2 method 3 -------- method n Do method 1 then method 3 Do method 2 then method 1 then method 3 Do method 2 every second
4
GUI USING AWT
5
GUI using AWT AWT - Abstract Window Toolkit Must base desktop programs on Frame constructor, paint, … browser programs on Applet init, start, paint, stop, destroy, … Can convert, but better to base code on Panel then it add to Frame or Applet
6
Implementing GUIs Two steps (1) Create the interface By add components & containers & using layout managers (2) Add interaction Create event listeners & “Wire-up” events
7
(1) Create the interface…
8
UI Component Layout… y x 0,0 OK 2 1 50,350 1250,950 Moral… use automated Layout! OK 2 1 LayoutManager demo… See also LayoutManager Visual Guide LayoutManager Visual Guide
9
AWT Applications - Frame Frame is a container for components Frame with normal window controls Optional Menu Three containers in Frame with Border Layout UI-components inside containers each with own layout
10
AWTEvent Font FontMetrics Component Graphics ObjectColor Canvas Button TextComponent Label List CheckBoxGroup CheckBox Choice ContainerPanelApplet Frame DialogFileDialog Window TextField TextArea MenuComponent MenuItem MenuBar Menu Scrollbar LayoutManager AWT classes
11
Understanding the GUI UI-containers have list of UI-components Each UI-component is a class with paint method & lists of Event listeners {Frame} {label} {textfield} {button} components
12
Setting up the GUI Extend Frame class In constructor Create instances of containers & add them to Frame Create instances of components & add them to containers or Frame Possibly override paint method UI-components added to components list Painting Frame 1. paints Frame borders 2. calls Frame paint method 3. calls paint method of each object in component list Hint: Employ layout managers to arrange components in containers
13
(2) Add interaction…
14
Events & Event Handling Example… User clicks on a button Button is source of event object Event object passed to associated listener object Listener object executes associated method to perform desired task (save file, quit program, …) Event listener object (executes method) Event Object Event cause (mouse, keyboard, timer, …) Event Source object
15
Event handling… {Thermostat} set of AlarmListeners {AlarmListener} handleAlarm(-) +addAlarmListener(-) {AlarmInfo} source reading {AlarmListener} handleAlarm(-) {AlarmBell} {AlarmListener} handleAlarm(-) {AirConditioner} {Heater} {AlarmListener} Recall…
16
Event handling… {Thermostat} set of AlarmListeners {AlarmListener} handleAlarm(-) +addAlarmListener(-) {Heater} {AlarmInfo} source reading {Button} set of ActionListeners {ActionListener} actionPerformed(-) +addActionListener(-) {MyPanel} {ActionEvent} source …
17
Event handling… {Button} set of ActionListeners {ActionListener} actionPerformed(-) +addActionListener(-) {MyPanel} {ActionEvent} source … {ActionListener} actionPerformed(-) {ActionEvent} source … {MyActionListener}
18
Event handling… {Button} set of ActionListeners {ActionListener} actionPerformed(-) +addActionListener(-) {MyPanel} {ActionEvent} source … {ActionListener} actionPerformed(-) {MyActionListener} {ActionEvent} source … {TextField} set of ActionListeners +addActionListener(-) {ActionEvent} source …
19
Event handling… {Frame} set of WindowListeners windowClosing(-) +addWindowListener(-) {MyWindowListener} {WindowEvent} source … {WindowListener} {WindowAdapter} windowClosing windowClosed windowIconified windowDeiconified windowOpened etc.
20
Setting up Event Handling Create listener class Using new or existing class, simply Implement desired event listener interface Putting code for desired action in its methods In application (e.g. Frame) Create instance of listener class Add as listener of source object can have any number of listeners for each event Source & listener can be same object!
21
Understanding Events When button is pressed actionPerformed method of every item in button’s actionListeners list called Similarly for textfield When Frame close button is pressed windowClosing method of every item in Frame’s windowListeners list called {Frame} {label} {textfield} {button} components ActionListeners actionPerformed {MyListener} actionPerformed WindowListeners windowClosing
22
Event Classes AWTEvent EventObject AdjustmentEvent ComponentEvent TextEvent ItemEvent ActionEvent InputEvent WindowEvent MouseEvent KeyEvent ContainerEvent FocusEvent PaintEvent ListSelectionEvent
23
GUI USING SWING
24
GUI using Swing Advantages OS independent Prettier! More sophisticated components & options Pluggable “Look & feel” Borders, Tooltips, etc. Drag ‘n Drop File & ColorChoosers, Tables, editors, etc. Conceptually same as AWT Still uses AWT events package
25
GUI using Swing Few differences (from AWT) Use javax.swing package (equivalent Swing components start with “J”) Frames can close automatically (well sort of…!) Add components to JFrame’s contentPane (v1.5+ no longer explicitly needed) Override paintComponent, not paint (except for Jframe, JApplet & JDialog) (also, must call super.paintComponent)
26
AWT & Swing classes AWTEvent Font FontMetrics Component Graphics Object Color Container Panel Applet Frame Dialog Window JComponent JApplet JFrame JDialog Swing Components in the javax.swing package Classes in the java.awt package 1 LayoutManager * Lightweight Heavyweight
27
Swing - JComponents See this Visual Guide to Swing Components
28
DESIGNING GUI’S…
29
Design Tips GUI code can get very messy Do not put everything in one class (as many Visual IDE’s do) Quick & dirty = impossible to change! Employ design patterns, e.g. MVC Think Design first...
30
MVC - Design Pattern View model controller View Multiple Views 14:30 Half past two hours: 14 mins: 30 secs: 25 1 sec. timer Reset
31
Design Tips Think & design first Use layout managers Use OOP What do you want? What existing class is closest? Extend it! digital clock view - centered text in plain box, extend label analogue clock view - graphics in plain box, extend panel begin with Panel rather than Frame/Applet then add instance(s) to whichever you want
32
THE FUTURE… JAVAFX?
33
OK Junk… OK 2 1
34
The Java Frame class By default: Invisible Zero size Empty Has BorderLayout Plain background Doesn’t close! setVisible( true); setSize( width, height); or pack(); add( new Button() ); setLayout( new FlowLayout() ); setBackground( Color.GREEN); & override paint(Graphics) …oops
35
Frames in Java (1) import java.awt.*; public class GUIPlay { public static void main( String[] args) { Frame f; f = new Frame(); f.setLayout( new FlowLayout() ); f.setSize( 300, 250); f.add( new Button( “OK”) ); // pack(); f.setVisible( true); }
36
Frames in Java (2) import java.awt.*; public class GUIPlay { public static void main( String[] args) { Frame f; f = new MyFrame(); new MyFrame(); } import java.awt.*; public class MyFrame extends Frame { public MyFrame() { setLayout( new FlowLayout() ); setSize( 300, 250); add( new Button( “OK”) ); setVisible( true); }
37
Frames in Java (3) import java.awt.*; public class GUIPlay { public static void main( String[] args) { Frame f; f = new MyFrame(); new MyFrame(); } import java.awt.*; public class MyFrame extends Frame { public MyFrame() { setLayout( new FlowLayout() ); setSize( 300, 250); add( new MyPanel() ); setVisible( true); } import java.awt.*; public class MyPanel extends Panel { public MyPanel() { Button b; setBackground( Color.GREEN ); setPreferredSize( new Dimension( 200, 150) ); b = new Button( “OK”); add( b); add( new Label( “Welcome”) ); add( new TextField(20) ); }
38
Frames in Java (4) import java.awt.*; public class GUIPlay { public static void main( String[] args) { Frame f; f = new MyFrame(); new MyFrame(); } import java.awt.*; public class MyFrame { public MyFrame() { setLayout( new FlowLayout() ); setSize( 300, 250); add( new MyPanel() ); setVisible( true); } import java.awt.*; public class MyPanel extends Panel { public MyPanel() { Button b; setBackground( Color.GREEN ); setPreferredSize( new Dimension( 200, 150) ); b = new Button( “OK”); b.addActionListener( new MyActionListener() ); add( b); add( new Label( “Welcome”) ); add( new TextField(20) ); } import java.awt.event.*; public class MyActionListener implements ActionListener { public void actionPerformed( ActionEvent e) { System.out.println( “Button pressed”); }
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.