1 / 41

F27SB2 Software Development 2

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

coyne
Download Presentation

F27SB2 Software Development 2

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. F27SB2 Software Development 2 Lecture 2: Java GUIs 1

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

  3. AWT import java.awt.*; • contains original AWT GUI classes • Component • main AWT class of GUI elements • e.gLabel, Button, TextField

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

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

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

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

  8. Container methods Containers have: • background • what things are drawn on e.g. paper • foreground • what things are drawn in e.gpen • e.g. Label

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

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

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

  12. Basic Swing classes • opacity depends on look and feel • change opacity with: public void setOpaque(Boolean isOpaque) • may need to setOpaque(true)

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

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

  15. Frames class program-name { ... class-name frame-name; ... } • in the class for the main program  • need an instance of class-name called frame-name

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

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

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

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

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

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

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

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

  24. Events and listeners interface WindowListener • package provides framework for building a WindowListener • abstract method • defined by method signature • type + name + parameters • no method body

  25. Events and listeners • interface • specification of abstract methods that implementation class will provide • implementation class must provide method details

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

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

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

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

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

  31. Example class testWhite { public static void main(String [] args) { White w; w = new White(); w.setTitle(“White”); w.setSize(200,220); w.setVisible(true); ...

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

  33. Example

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

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

  36. Example: flashing window void pause(long millisecs) { long startTime = Calendar.getInstance(). getTimeInMillis(); while(Calendar. getInstance(). getTimeInMillis()- startTime<millisecs); }

  37. 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){...}

  38. Example: flashing window public void flash() { while(true) { pause(500); getContentPane(). setBackground(Color.white); pause(500); getContentPane(). setBackground(Color.black); } } }

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

  40. Example: flashing window b.addWindowListener (new WindowAdapter() { public void windowClosing (WindowEvent e) { System.exit(0); } }); b.flash(); } }

  41. Example: flashing window

More Related