410 likes | 554 Views
F27SB2 Software Development 2. Lecture 2: Java GUIs 1. Overview. Java GUIs based on 2 main class libraries AWT - Abstract Windowing Toolkit original Java GUI classes Swing subset of JFC - Java Foundation Classes extends AWT subtle but crucial differences with AWT...
E N D
F27SB2 Software Development 2 Lecture 2: Java GUIs 1
Overview • Java GUIs based on 2 main class libraries • AWT - Abstract Windowing Toolkit • original Java GUI classes • Swing • subset of JFC - Java Foundation Classes • extends AWT • subtle but crucial differences with AWT... • we will use Swing but need to be aware of AWT concepts
AWT import java.awt.*; • contains original AWT GUI classes • Component • main AWT class of GUI elements • e.gLabel, Button, TextField
Container • class of Components that can have other Components inside them • e.g. Frame • top-level displayable window • e.g. Panel • Containerwith no display • LayoutManager • interface class • control positions of nested Components
Container methods • all Containers have rectangular size • smallest enclosing rectangle • width • height public void setSize(intwidth,intheight) • width and height are in pixels • pixel • one point on screen
Container methods • size of pixel depends on • screen’s physical size • diagonal in inches e.g. 15”; 17”; 21” • screen resolution • number of columns/rows in pixels e.g. 1680*1050 • NB make sure Container is big enough to hold everything! • NB size of Container will change depending on properties of LayoutManager- more later
Container methods • Containers may be visible or invisible public void setVisible(booleanb) • make visible setVisible(true) • make invisible setVisible(false) • use to change Component availability • e.g. turn available buttons on/off
Container methods Containers have: • background • what things are drawn on e.g. paper • foreground • what things are drawn in e.gpen • e.g. Label
Container methods public void setBackground(Colorc) • set Container’s background colour to c public void setForeground(Colorc) • set Container’s foreground colour to c • use these to change foreground/background dynamically at run-time
Container methods public class Color public static final Color black, blue, cyan, darkGrey, gray, green lightGray, magenta, orange, pink, red, white,yellow • must preface colour identifier with Color • e.g. Color.blue • NB to make things in foreground disappear • set foreground to same colour as background
Basic Swing classes import javax.swing.*; • many Swing classes extend AWT classes public class JComponentextends Container • main Swing GUI class NB JComponents may be: • opaque – can’t see through background • transparent – can see through background
Basic Swing classes • opacity depends on look and feel • change opacity with: public void setOpaque(Boolean isOpaque) • may need to setOpaque(true)
Frames public class JFrame extends Frame • top-level window • with: title-bar; menu-bar; cursor; icon; etc • NB not a JComponent public void setTitle(String title) • set title on Frame’s title bar to title
Frames • to create and open a simple JFrame: class class-name extends JFrame { ... public class-name(...){ ... } } • frame is set up in a class called class-namewhich is an extended JFrame • need an constructor for a class-nameto • initialise an instance of the JFrame • hold JComponents that make up the JFrame
Frames class program-name { ... class-name frame-name; ... } • in the class for the main program • need an instance of class-name called frame-name
Frames public static void main(String [] args) { frame-name = new class-Name(); frame-name.setTitle(“title”); frame-name.setSize(width,height); frame-name.setVisible(true); } • call the constructor to instantiate frame-name to an instance of class-name • give JFrame an appropriate title
Frames public static void main(String [] args) { frame-name = new class-Name(); frame-name.setTitle(“title”); frame-name.setSize(width,height); frame-name.setVisible(true); } • set the JFrame’s size to widthand height • NB must allow size for title bar when specifying Frame height e.g. 20 pixels • make the JFramevisible
Frames • in general, cannot work directly on JFrame • must manipulate the JFrame’sContentPane • ContentPane is a Container • has BorderLayout as default • more later • to access ContentPane use: public Container getContentPane()
Frames • e.g. 200*220 white window import java.awt.*;import javax.swing.*; class White extends JFrame { public White() { getContentPane(). setBackground(Color.white); } } • constructor explicitly locates ContentPaneand sets background to white • however, many methods will work implicitly on ContentPanee.g. add,setLayout
Frames class TestWhite { static White w; public static void main(String [] args) { w = new White(); w.setTitle(“White”); w.setSize(200,220); w.setVisible(true); } } • main constructs instance of White and sets up title, size and visibility
Events and listeners • not yet enough to display window... • need to provide further details for the operating system • what to do when window is opened or closed or iconifiedetc • event • something that happens outside of a program • listener • code that responds to an event
Events and listeners • selecting window menu bar icons causes events • events are detected by the Java system • Java system: • stops our program • calls the appropriate listener
Events and listeners • we need to... • import AWT Java event classes import java.awt.event.*; • tell the system that we have a listener for window events public void addWindowListener(WindowListenerl) • build a WindowListenerto respond to events
Events and listeners interface WindowListener • package provides framework for building a WindowListener • abstract method • defined by method signature • type + name + parameters • no method body
Events and listeners • interface • specification of abstract methods that implementation class will provide • implementation class must provide method details
Events and listeners public interface WindowListener extends EvenListener { public void windowActivated(WindowEvente); public void windowClosed(WindowEvente); public void windowClosing(WindowEvente); public void windowDeactivated(WindowEvente); public void windowDeiconified(WindowEvente); public void windowIconified(WindowEvent e); public void windowOpened(WindowEvente); }
Events and listeners • specific events when window is: • activated/deactivated or opened/closed or iconified/deiconified • system: • calls the appropriate method from interface • provides a WindowEvent parameter to provide details of the event
Events and listeners • all methods in WindowListenerare abstract • our class must • implement WindowListener • provide details for all methods • we could implement details of all the interface methods ourselves...
Events and listeners • better to: • subclass a supplied implementation of the interface • override methods we are concerned about public class WindowAdapter implements WindowListener • provides empty versions of all above methods • call WindowAdapterconstructor • with body that defines our versions of methods • to return a WindowListener
Example • e.g. 200*220 window with white background import java.awt.*; import java.awt.event.*; import javax.swing.*; class White extends JFrame { public White() { setBackground(Color.white); } }
Example class testWhite { public static void main(String [] args) { White w; w = new White(); w.setTitle(“White”); w.setSize(200,220); w.setVisible(true); ...
Example ... w.addWindowListener (new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } } • call addWindowListener • with a new WindowListener • built from WindowAdapter • with a new windowClosingto exit from White
Example: flashing window • window flashes black to white and back every 0.5 sec • repeatedly change background • need some way of pausing import java.util.*; • Calendarclass Calendar Calendar.getInstance() • returns a Calendar object which holds a snapshot of the current date and time
Example: flashing window long getTimeInMillis() • returns time in milliseconds from Calendarobject • NB to update time, must create new Calendar object • to pause: • find start time • repeatedly • compare current time with start time • until required time has passed
Example: flashing window void pause(long millisecs) { long startTime = Calendar.getInstance(). getTimeInMillis(); while(Calendar. getInstance(). getTimeInMillis()- startTime<millisecs); }
Example: flashing window import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; class Blackwhite extends JFrame { public Blackwhite() { getContentPane(). setBackground(Color.black); } private void pause(long millisecs){...}
Example: flashing window public void flash() { while(true) { pause(500); getContentPane(). setBackground(Color.white); pause(500); getContentPane(). setBackground(Color.black); } } }
Example: flashing window class TestBlackwhite { public static void main(String [] args) { static Blackwhite b; b = new Blackwhite(); b.setTitle(“Black and white”); b.setSize(200,220); b.setVisible(true);
Example: flashing window b.addWindowListener (new WindowAdapter() { public void windowClosing (WindowEvent e) { System.exit(0); } }); b.flash(); } }