Graphical User Interface (GUI) and Object- Oriented Design (OOD)

Similar documents
Chapter 12 GUI Basics

Chapter 13 GUI Basics. Liang, Introduction to Java Programming, Seventh Edition, (c) 2009 Pearson Education, Inc. All rights reserved.

Chapter 12 GUI Basics. Motivations. The design of the API for Java GUI programming

Chapter 12 Advanced GUIs and Graphics

Learn Java Programming, Dr.Hashamdar. Getting Started with GUI Programming

Graphics. Lecture 18 COP 3252 Summer June 6, 2017

Java Programming Lecture 6

Topic 9: Swing. Swing is a BIG library Goal: cover basics give you concepts & tools for learning more

Topic 9: Swing. Why are we studying Swing? GUIs Up to now: line-by-line programs: computer displays text user types text. Outline. 1. Useful & fun!

Starting Out with Java: From Control Structures Through Objects Sixth Edition

PROGRAMMING DESIGN USING JAVA (ITT 303) Unit 7

Unit 7: Event driven programming

Outline. Topic 9: Swing. GUIs Up to now: line-by-line programs: computer displays text user types text AWT. A. Basics

Part 3: Graphical User Interface (GUI) & Java Applets

Graphic User Interfaces. - GUI concepts - Swing - AWT

Introduction to the JAVA UI classes Advanced HCI IAT351

Programming graphics

Previously, we have seen GUI components, their relationships, containers, layout managers. Now we will see how to paint graphics on GUI components

Graphics programming. COM6516 Object Oriented Programming and Design Adam Funk (originally Kirill Bogdanov & Mark Stevenson)

Class 14: Introduction to the Swing Toolkit

1.00 Lecture 14. Lecture Preview

CSE 143. Event-driven Programming and Graphical User Interfaces (GUIs) with Swing/AWT

Part I: Learn Common Graphics Components

Frames, GUI and events. Introduction to Swing Structure of Frame based applications Graphical User Interface (GUI) Events and event handling

Command-Line Applications. GUI Libraries GUI-related classes are defined primarily in the java.awt and the javax.swing packages.

Window Interfaces Using Swing Objects

Java. GUI building with the AWT

Packages: Putting Classes Together

Graphical User Interfaces. Comp 152

Unit 6: Graphical User Interface

PIC 20A GUI with swing

User interfaces and Swing

Introduction. Introduction

AP CS Unit 11: Graphics and Events

Class 16: The Swing Event Model

Window Interfaces Using Swing Objects

Handout 14 Graphical User Interface (GUI) with Swing, Event Handling

CSEN401 Computer Programming Lab. Topics: Graphical User Interface Window Interfaces using Swing

Graphical User Interfaces (GUIs)

CSE 331. Event-driven Programming and Graphical User Interfaces (GUIs) with Swing/AWT

G51PRG: Introduction to Programming Second semester Applets and graphics

Lecture 5: Java Graphics

Control Flow: Overview CSE3461. An Example of Sequential Control. Control Flow: Revisited. Control Flow Paradigms: Reacting to the User

Graphical User Interface (GUI)

2IS45 Programming

Agenda. Programming Seminar. By: dr. Amal Khalifa. Coordinate systems Colors Fonts Drawing shapes Graphics2D API

CS 251 Intermediate Programming GUIs: Components and Layout

The JFrame Class Frame Windows GRAPHICAL USER INTERFACES. Five steps to displaying a frame: 1) Construct an object of the JFrame class

Introduction to Graphical User Interfaces (GUIs) Lecture 10 CS2110 Fall 2008

CHAPTER 2. Java Overview

To gain experience using GUI components and listeners.

China Jiliang University Java. Programming in Java. Java Swing Programming. Java Web Applications, Helmut Dispert

Datenbank-Praktikum. Universität zu Lübeck Sommersemester 2006 Lecture: Swing. Ho Ngoc Duc 1

Sri Vidya College of Engineering & Technology

Graphical User Interfaces. Swing. Jose Jesus García Rueda

We are on the GUI fast track path

Adding Buttons to StyleOptions.java

CPS122 Lecture: Graphical User Interfaces and Event-Driven Programming

Introduction to Graphical Interface Programming in Java. Introduction to AWT and Swing

COMPSCI 230. Software Design and Construction. Swing

BASICS OF GRAPHICAL APPS

Chapter 7: A First Look at GUI Applications

CSE 331. Event- driven Programming and Graphical User Interfaces (GUIs) with Swing/AWT

Graphics and Painting

12/22/11. Copyright by Pearson Education, Inc. All Rights Reserved.

Swing. By Iqtidar Ali

Graphical User Interface (GUI) components in Java Applets. With Abstract Window Toolkit (AWT) we can build an applet that has the basic GUI

Systems Programming Graphical User Interfaces

CompSci 125 Lecture 17. GUI: Graphics, Check Boxes, Radio Buttons

Java & Graphical User Interface II. Wang Yang wyang AT njnet.edu.cn

Graphical Applications

CPS122 Lecture: Graphical User Interfaces and Event-Driven Programming

Chapter 15 Event-Driven Programming and Animations

Heavyweight with platform-specific widgets. AWT applications were limited to commonfunctionality that existed on all platforms.

Java: Graphical User Interfaces (GUI)

Graphics User Defined Forms, Part I

Example: Building a Java GUI

COSC 123 Computer Creativity. Graphics and Events. Dr. Ramon Lawrence University of British Columbia Okanagan

Course Status Networking GUI Wrap-up. CS Java. Introduction to Java. Andy Mroczkowski

Lecture 3: Java Graphics & Events

All the Swing components start with J. The hierarchy diagram is shown below. JComponent is the base class.

CS Exam 1 Review Suggestions

DM550 / DM857 Introduction to Programming. Peter Schneider-Kamp

SINGLE EVENT HANDLING

encompass a group of features for building Graphical User Interfaces (GUI).

CS11 Java. Fall Lecture 3

Graphical User Interface (GUI)

Lecture 9. Lecture

11/7/12. Discussion of Roulette Assignment. Objectives. Compiler s Names of Classes. GUI Review. Window Events

Java Graphical User Interfaces AWT (Abstract Window Toolkit) & Swing

Lab 4. D0010E Object-Oriented Programming and Design. Today s lecture. GUI programming in

G51PGP Programming Paradigms. Lecture 008 Inner classes, anonymous classes, Swing worker thread

Example: Building a Java GUI

H212 Introduction to Software Systems Honors

17 GUI API: Container 18 Hello world with a GUI 19 GUI API: JLabel 20 GUI API: Container: add() 21 Hello world with a GUI 22 GUI API: JFrame: setdefau

Swing I CHAPTER EVENT-DRIVEN PROGRAMMING 921 Events and Listeners 921

Swing I Event-Driven Programming Buttons, Events, and Other Swing Basics Containers and Layout Managers 946

Java Applets This is not a Java course! (You re supposed to know about Java.)

2110: GUIS: Graphical User Interfaces

Lecture 18 Java Graphics and GUIs

Transcription:

Chapter 6,13 Graphical User Interface (GUI) and Object- Oriented Design (OOD) Objectives To distinguish simple GUI components. To describe the Java GUI API hierarchy. To create user interfaces using frames, panels, and simple UI components. To understand the role of layout managers. To use the FlowLayout, GridLayout, and BorderLayout managers to layout components in a container. To specify colors and fonts using the Color and Font classes. To use JPanel as subcontainers. 1 2 Objectives cont. Creating GUI Objects // Create a button with text OK JButton jbtok = new JButton("OK"); Discover events and event handlers To write programs to deal with ActionEvent. To write programs to deal with MouseEvent. // Create a label with text "Enter your name: " JLabel jlblname = new JLabel("Enter your name: "); Button Label Text field Check Box Radio Button To write programs to deal with KeyEvent Explore object-oriented design Learn how to identify objects, classes, and members of a class // Create a text field with text "Type Name Here" JTextField jtfname = new JTextField("Type Name Here"); // Create a check box with text bold JCheckBox jchkbold = new JCheckBox("Bold"); // Create a radio button with text red JRadioButton jrbred = new JRadioButton("Red"); Combo Box // Create a combo box with choices red, green, and blue JComboBox jcbocolor = new JComboBox(new String[]{"Red", "Green", "Blue"}); 3 4

Swing vs. AWT So why do the GUI component classes have a prefix J? Instead of JButton, why not name it simply Button? In fact, there is a class already named Button in the java.awt package. Swing GUI Components When Java was introduced, the GUI classes were bundled in a library known as the Abstract Windows Toolkit (AWT). For every platform on which Java runs, the AWT components are automatically mapped to the platform-specific components through their respective agents, known as peers. AWT is fine for developing simple graphical user interfaces, but not for developing comprehensive GUI projects. Besides, AWT is prone to platform-specific bugs because its peer-based approach relies heavily on the underlying platform. With the release of Java 2, the AWT user-interface components were replaced by a more robust, versatile, and flexible library known as Swing components. Swing components are painted directly on canvases using Java code, except for components that are subclasses of java.awt.window or java.awt.panel, which must be drawn using native GUI on a specific platform. Swing components are less dependent on the target platform and use less of the native GUI resource. For this reason, Swing components that don t rely on native GUI are referred to as lightweight components, and AWT components are referred to as heavyweight components. 5 6 Inheritance Hierarchy of GUI Classes Frames Frame is a window that is not contained inside another window. Frame is the basis to contain other user interface components in Java GUI applications. The JFrame class can be used to create windows. For Swing GUI programs, use JFrame class to create widows. 7 8

class JFrame Methods Provided by the class JFrame GUI window instance created as instance of JFrame Provides various methods to control window attributes 9 10 Methods Provided by the class Jframe (continued) Two Ways to Create a Window First way Declare object of type JFrame Instantiate object Use various methods to manipulate window Second way Create class containing application program by extending definition of class JFrame Utilizes mechanism of inheritance 11 12

Creating Frames import javax.swing.*; public class MyFrame { public static void main(string[] args) { JFrame frame = new JFrame("Test Frame"); frame.setsize(400, 300); frame.setvisible(true); frame.setdefaultcloseoperation( JFrame.EXIT_ON_CLOSE); } } Content Pane Inner area of GUI window (below title bar, inside border) To access content pane Declare reference variable of type Container Use method getcontentpane of class JFrame MyFrame 13 14 Constructors and Methods of the class Container Adding Components into a Frame Title bar // Add a button into the frame frame.getcontentpane().add( new JButton("OK")); Content pane 15 16

Content Pane Delegation in JDK 1.5 Title bar Content pane // Add a button into the frame frame.getcontentpane().add( new JButton("OK")); // Add a button into the frame frame.add( new JButton("OK")); MyFrameWithComponents class JLabel Labels: objects of particular class type classjlabel: used to create labels Label attributes Title Width Height To create a label Instantiate object of type JLabel Modify attributes to control display of labels 17 18 class Jlabel (continued) class JTextField Text fields: objects belonging to class JTextField To create text field Declare reference variable of type JTextField Instantiate object 19 20

classjtextfield (continued) classjtextfield (continued) 21 22 class JButton class Jbutton (continued) Provided to create buttons in Java To create button Same technique as creating JLabel and JTextField 23 24

Class ButtonGroup This class is used to create a multiple-exclusion scope for a set of buttons. Creating a set of buttons with the same ButtonGroup object means that turning "on" one of those buttons turns off all other buttons in the group. private ButtonGroup Group = new ButtonGroup(); Group.add(JButton); Group.add(JButton); Void add(abstractbutton b) Adds the button to the group. Void int ButtonModel Method Summary clearselection() Clears the selection such that none of the buttons in the ButtonGroup are selected. getbuttoncount() Returns the number of buttons in the group. getselection() Returns the model of the selected button. boolean isselected(buttonmodel m) Returns whether a ButtonModel is selected. 25 Void remove(abstractbutton b) Removes the button from the group. Void setselected(buttonmodel m, boolean b) Sets the selected value for the ButtonModel. 26 Layout Managers Java s layout managers provide a level of abstraction to automatically map your user interface on all window systems. The UI components are placed in containers. Each container has a layout manager to arrange the UI components within the container. Layout managers are set in containers using the setlayout(layoutmanager) method in a container. Kinds of Layout Managers FlowLayout GridLayout BorderLayout There are Several other layout managers 27 28

The FlowLayout Class FlowLayout Example Write a program that adds three labels and text fields into the content pane of a frame with a FlowLayout manager. ShowFlowLayout 29 30 The GridLayout Class GridLayout Example Write a program using GridLayout manager to display the labels and text fields. ShowGridLayout 31 32

The BorderLayout Manager The BorderLayout Class The BorderLayout manager divides the container into five areas: East, South, West, North, and Center. Components are added to a BorderLayout by using the add method. add(component, constraint), where constraint is BorderLayout.EAST, BorderLayout.SOUTH, BorderLayout.WEST, BorderLayout.NORTH, or BorderLayout.CENTER. 33 34 BorderLayout Example Using Panels as Sub-Containers Panels act as sub-containers for grouping user interface components. It is recommended that you place the user interface components in panels and place the panels in a frame. You can also place panels in a panel. To add a component to JFrame, you actually add it to the content pane of JFrame. To add a component to a panel, you add it directly to the panel using the add method. ShowBorderLayout 35 36

Creating a JPanel You can use new JPanel() to create a panel with a default FlowLayout manager or new JPanel(LayoutManager) to create a panel with the specified layout manager. Use the add(component) method to add a component to the panel. For example, Testing Panels Example This example uses panels to organize components. The program creates a user interface for a Microwave oven. JPanel p = new JPanel(); p.add(new JButton("OK")); TestPanels 37 38 The Color Class You can set colors for GUI components by using the java.awt.color class. Colors are made of red, green, and blue components, each of which is represented by a byte value that describes its intensity, ranging from 0 (darkest shade) to 255 (lightest shade). This is known as the RGB model. Color c = new Color(r, g, b); r, g, and b specify a color by its red, green, and blue components. Constructors of the class Color Example: Color c = new Color(228, 100, 255); 39 40

Constructors of the class Color (continued) Constants Defined in the class Color 41 42 Standard Colors Thirteen standard colors (black, blue, cyan, darkgray, gray, green, lightgray, magenta, orange, pink, red, white, yellow) are defined as constants in java.awt.color. The standard color names are constants, but they are named as variables with lowercase for the first word and uppercase for the first letters of subsequent words. Thus the color names violate the Java naming convention. Since JDK 1.4, you can also use the new constants: BLACK, BLUE, CYAN, DARK_GRAY, GRAY, GREEN, LIGHT_GRAY, MAGENTA, ORANGE, PINK, RED, WHITE, and YELLOW. Setting Colors You can use the following methods to set the component s background and foreground colors: setbackground(color c) setforeground(color c) Example: jbt.setbackground(color.yellow); jbt.setforeground(color.red); 43 44

class Font Shows text in different fonts Contained in package java.awt Available fonts Serif/SanSerif Monospaced Dialog/DialogInput Arguments for constructor String specifying the Font face name int value specifying Font style int value specifying Font size Expressed in points (72 points = 1 inch) 45 Font Names Standard font names that are supported in all platforms are: SansSerif, Serif, Monospaced, Dialog, or DialogInput. The Font Class Font myfont = new Font(name, style, size); Example: Font myfont = new Font("SansSerif ", Font.BOLD, 16); Font myfont = new Font("Serif", Font.BOLD+Font.ITALIC, 12); JButton jbtok = new JButton("OK ); jbtok.setfont(myfont); Font Style Font.PLAIN (0), Font.BOLD (1), Font.ITALIC (2), and Font.BOLD + Font.ITALIC (3) 46 Constructors and Methods of the class Font Finding All Available Font Names GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment(); String[] fontnames = e.getavailablefontfamilynames(); for (int i = 0; i < fontnames.length; i++) System.out.println(fontnames[i]); FinfFond Java Programming: From Problem Analysis to Program Design, 3e 47 48

Common Features of Swing Components Constructors and Methods of the class Component 49 50 Constructors and Methods of the classcomponent (continued) Constructors and Methods of the classcomponent (continued) 51 52

Constructors and Methods of the classcomponent (continued) 53 Borders You can set a border on any object of the JComponent class. Swing has several types of borders. To create a titled border, use new TitledBorder(String title). To create a line border, use new LineBorder(Color color, int width), where width specifies the thickness of the line. For example, the following code displays a titled border on a panel: JPanel panel = new JPanel(); panel.setborder(new TitleBorder( My Panel )); 54 Test Swing Common Features Component Properties font background foreground preferredsize minimumsize maximumsize JComponent Properties tooltiptext border Image Icons Java uses the javax.swing.imageicon class to represent an icon. An icon is a fixed-size picture; typically it is small and used to decorate components. Images are normally stored in image files. You can use new ImageIcon(filename) to construct an image icon. For example, the following statement creates an icon from an image file us.gif in the image directory under the current class path: ImageIcon icon = new ImageIcon("image/jo.gif"); TestSwingCommonFeatures TestImageIcon 55 56

class Graphics Constructors and Methods of the class Graphics Provides methods for drawing items such as lines, ovals, and rectangles on the screen Contains methods to set the properties of graphic elements including clipping area, fonts, and colors Contained in the package java.awt 57 58 Constructors and Methods of the classgraphics (continued) Constructors and Methods of the classgraphics (continued) 59 60

Constructors and Methods of the classgraphics (continued) Constructors and Methods of the classgraphics (continued) 61 62 Constructors and Methods of the classgraphics (continued) Constructors and Methods of the classgraphics (continued) 63 64

Constructors and Methods of the classgraphics (continued) Two Problems With the Preceding Example If you resize the frame, the line is gone. It is awkward to program because you have to make sure that the component to be displayed before obtaining its graphics context using the getgraphics() method. For this reason, Lines 20 and 21 are placed after the frame is displayed in Line 17. To fix the first problem, you need to know its cause. When you resize the frame, the JVM invokes the paintcomponent method of a Swing component (e.g., a label) to redisplay the graphics on the component. Since you did not draw a line in the paintcomponent method, the line is gone when the frame is resized. To permanently display the line, you need to draw the line in the paintcomponent method. 65 The paintcomponent Method The paintcomponent method is defined in JComponent, and its header is as follows: protected void paintcomponent(graphics g) This method, defined in the JComponent class, is invoked whenever the component is first displayed or redisplayed. The Graphics object g is created automatically by the JVM for every visible GUI component. The JVM obtains the Graphics object and passes it to invoke paintcomponent. Procedural vs. Event-Driven Programming Procedural programming is executed in procedural order. In event-driven programming, code is executed upon activation of events. 68

69 70 Handling an Event Action event: event created when JButton is clicked Event listener: object that receives message when JButton is clicked In Java, you must register the listener Handling an Event (continued) class ActionListener Handles action event Part of package java.awt.event The classactionlistener is a special type of class (interface) Must contain actionperformed method 71 72

Taste of Event-Driven Programming java.awt.event.actionevent The example displays a button in the frame. A message is displayed on the console when a button is clicked. SimpleEventDemo 73 74 Inner Class Listeners A listener class is designed specifically to create a listener object for a GUI component (e.g., a button). It will not be shared by other applications. So, it is appropriate to define the listener class inside the frame class as an inner class. Inner Classes Inner class: A class is a member of another class. Advantages: In some applications, you can use an inner class to make programs simple. An inner class can reference the data and methods defined in the outer class in which it nests, so you do not need to pass the reference of the outer class to the constructor of the inner class. ShowInnerClass 75 76

Inner Classes, cont. Inner Classes (cont.) Inner classes can make programs simple and concise. An inner class supports the work of its containing outer class and is compiled into a class named OuterClassName$InnerClassName.class. For example, the inner class InnerClass in OuterClass is compiled into OuterClass$InnerClass.class. 77 78 Inner Classes (cont.) An inner class can be declared public, protected, or private subject to the same visibility rules applied to a member of the class. An inner class can be declared static. A static inner class can be accessed using the outer class name. A static inner class cannot access nonstatic members of the outer class Revising SimpleEventDemo Using Inner Classes SimpleEventDemoInnerClass 79 80

Anonymous Inner Classes An anonymous inner class must always extend a superclass or implement an interface, but it cannot have an explicit extends or implements clause. An anonymous inner class must implement all the abstract methods in the superclass or in the interface. An anonymous inner class always uses the no-arg constructor from its superclass to create an instance. If an anonymous inner class implements an interface, the constructor is Object(). An anonymous inner class is compiled into a class named OuterClassName$n.class. For example, if the outer class Test has two anonymous inner classes, these two classes are compiled into Test$1.class and Test$2.class. Anonymous Inner Classes (cont.) Inner class listeners can be shortened using anonymous inner classes. An anonymous inner class is an inner class without a name. It combines declaring an inner class and creating an instance of the class in one step. An anonymous inner class is declared as follows: new SuperClassName/InterfaceName() { // Implement or override methods in superclass or interface // Other methods if necessary } 81 82 Revising SimpleEventDemo Using Anonymous Inner Classes Example: Handling Simple Action Events Objective: Display two buttons OK and Cancel in the window. A message is displayed on the console to indicate which button is clicked, when a button is clicked. SimpleEventDemoAnonymousInnerClass TestActionEvent 83 84

Interaction Between Source and Listener 1. jbtok registers btlistener by invoking addactionlistener(btlistner). 2. jbtcancel registers btlistener by invoking addactionlistener(btlistner). 3. jbtok invokes btlistener s actionperformed method to process an ActionEvnet. 4. jbtcancel invokes btlistener s actionperformed method to process an ActionEvent. Example: Handling Window Events Objective: Demonstrate handling the window events. Any subclass of the Window class can generate the following window events: window opened, closing, closed, activated, deactivated, iconified, and deiconified. This program creates a frame, listens to the window events, and displays a message to indicate the occurring event. TestWindowEvent 85 86 Example: Multiple Listeners for a Single Source MouseEvent Objective: This example modifies previous Listing to add a new listener for each button. The two buttons OK and Cancel use the frame class as the listener. This example creates a new listener class as an additional listener for the action events on the buttons. When a button is clicked, both listeners respond to the action event. TestMultipleListener 87 88

Handling Mouse Events Handling Mouse Events Java provides two listener interfaces, MouseListener andmousemotionlistener, to handle mouse events. The MouseListener listens for actions such as when the mouse is pressed, released, entered, exited, or clicked. The MouseMotionListener listens for actions such as dragging or moving the mouse. 89 90 Example: Moving Message Using Mouse Objective: Create a program to display a message in a panel. You can use the mouse to move the message. The message moves as the mouse drags and is always displayed at the mouse point. MoveMessageDemo Example: Handling Complex Mouse Events Objective: Create a program for drawing using a mouse. Draw by dragging with the left mouse button pressed; erase by dragging with the right button pressed. ScribbleDemo 91 92

Applets Members of class JApplet Applet: a Java program that is embedded within a Web page and executed by a Web browser Create an applet by extending the class JApplet classjapplet contained in package javax.swing 93 94 Members of class Japplet (continued) Applets (continued) No main method Methods init, start, and paint guaranteed to be invoked in sequence To develop an applet Override any/all of the methods above 95 96

init Method Applet Methods Initializes variables Gets data from user Places various GUI components paint Method Performs output Skeleton of a Java Applet import java.awt.graphics; import javax.swing.japplet; public class WelcomeApplet extends JApplet { } 97 98 Applet Displaying Welcome Message //Welcome Applet Differences Between Applets and GUI Applications import java.awt.graphics; import javax.swing.japplet; public class WelcomeApplet extends JApplet { public void paint(graphics g) { super.paint(g); //Line 1 g.drawstring("welcome to Java Programming", 30, 30); //Line 2 } } HTML Code 99 Applets Derived from JApplet No main method Uses init method Displayed by HTML Sets title in HTML Size set in HTML Applet closes when HTML doc closes GUI applications class extends JFrame Invokes main method Uses constructors Uses method setvisible Uses settitle method Uses method setsize Closes with Exit button 100

Converting a GUI Application to an Applet Change JFrame to JApplet Change constructor to method init Remove method calls such as setvisible, settitle, setsize Remove the method main If applicable, remove Exit button/all code associated with it (e.g. action listener) Creating Applets class Font Chapter Summary class Graphics class Color Differences between Applet and GUI application Converting GUI application to Applet 101 102 Chapter Summary (continued) GUI components JTextArea JCheckBox JRadioButton Layout managers Menus Key and mouse events 103