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

Similar documents
Introduction to the JAVA UI classes Advanced HCI IAT351

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

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

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

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

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

Swing. By Iqtidar Ali

PROGRAMMING DESIGN USING JAVA (ITT 303) Unit 7

Java. GUI building with the AWT

Graphic User Interfaces. - GUI concepts - Swing - AWT

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

MODEL UPDATES MANIPULATES USER

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

Sri Vidya College of Engineering & Technology

CS 251 Intermediate Programming GUIs: Components and Layout

Graphical User Interfaces. Comp 152

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

Graphical User Interfaces (GUIs)

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

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

Introduction p. 1 JFC Architecture p. 5 Introduction to JFC p. 7 The JFC 1.2 Extension p. 8 Swing p. 9 Drag and Drop p. 16 Accessibility p.

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

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!

Window Interfaces Using Swing Objects

Laying Out Components. What is Widget Layout?

Java: Graphical User Interfaces (GUI)

What is Widget Layout? Laying Out Components. Resizing a Window. Hierarchical Widget Layout. Interior Design for GUIs

Java Graphical User Interfaces

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

Packages: Putting Classes Together

CS11 Java. Fall Lecture 4

INTRODUCTION TO (GUIS)

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

CHAPTER 2. Java Overview

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

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

Advanced Java Programming. Swing. Introduction to Swing. Swing libraries. Eran Werner, Tel-Aviv University Summer, 2005

Java Swing. based on slides by: Walter Milner. Java Swing Walter Milner 2005: Slide 1

Swing UI. Powered by Pentalog. by Vlad Costel Ungureanu for Learn Stuff

11/6/15. Objec&ves. RouleQe. Assign 8: Understanding Code. Assign 8: Bug. Assignment 8 Ques&ons? PROGRAMMING PARADIGMS

Java Swing. Lists Trees Tables Styled Text Components Progress Indicators Component Organizers

Tool Kits, Swing. Overview. SMD158 Interactive Systems Spring Tool Kits in the Abstract. An overview of Swing/AWT

Window Interfaces Using Swing Objects

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

2110: GUIS: Graphical User Interfaces

Chapter 12 Advanced GUIs and Graphics

KF5008 Program Design & Development. Lecture 1 Usability GUI Design and Implementation

Java Programming Lecture 6

1.00 Lecture 14. Lecture Preview

Dr. Hikmat A. M. AbdelJaber

Building a GUI in Java with Swing. CITS1001 extension notes Rachel Cardell-Oliver

Graphical User Interface (GUI)

Introduction. Introduction

Calculator Class. /** * Create a new calculator and show it. */ public Calculator() { engine = new CalcEngine(); gui = new UserInterface(engine); }

BASICS OF GRAPHICAL APPS

1. Swing Note: Most of the stuff stolen from or from the jdk documentation. Most programs are modified or written by me. This section explains the

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

Class 14: Introduction to the Swing Toolkit

The Abstract Windowing Toolkit. Java Foundation Classes. Swing. In April 1997, JavaSoft announced the Java Foundation Classes (JFC).

Swing from A to Z Some Simple Components. Preface

Basicsof. JavaGUI and SWING

Widgets. Overview. Widget. Widgets Widget toolkits Lightweight vs. heavyweight widgets Swing Widget Demo

Part I: Learn Common Graphics Components

The AWT Package, An Overview

Chapter 12 GUI Basics

Graphics. Lecture 18 COP 3252 Summer June 6, 2017

CS11 Java. Fall Lecture 3

Java IDE Programming-I

Chapter 6: Graphical User Interfaces

Review. Designing Interactive Systems II. Introduction. Web 2.0 in keywords GWT Cappuccino HTML5. Cross platform GUI Toolkit

Designing Interactive Systems II

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

Unit 6: Graphical User Interface

Containers and Components

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

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

GUI and its COmponent Textfield, Button & Label. By Iqtidar Ali

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

Widget. Widget is a generic name for parts of an interface that have their own behaviour. e.g., buttons, progress bars, sliders, drop-down

Graphical User Interfaces

Graphical interfaces & event-driven programming

GUI Basics. Object Orientated Programming in Java. Benjamin Kenwright

User interfaces and Swing

CS111: PROGRAMMING LANGUAGE II

GUI Programming. Chapter. A Fresh Graduate s Guide to Software Development Tools and Technologies

CPS122 Lecture: Graphical User Interfaces and Event-Driven Programming

Chapter 8. Java continued. CS Hugh Anderson s notes. Page number: 264 ALERT. MCQ test next week. This time. This place.

Java continued. Chapter 8 ALERT ALERT. Last week. MCQ test next week. This time. This place. Closed book. Assignment #2 is for groups of 3

Goals. Lecture 7 More GUI programming. The application. The application D&D 12. CompSci 230: Semester JFrame subclass: ListOWords

Systems Programming Graphical User Interfaces

Lecture 9. Lecture

Swing from A to Z Using Focus in Swing, Part 2. Preface

(Incomplete) History of GUIs

JRadioButton account_type_radio_button2 = new JRadioButton("Current"); ButtonGroup account_type_button_group = new ButtonGroup();

Building Java Programs Bonus Slides

Widgets. Widgets Widget Toolkits. 2.3 Widgets 1

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

Graphical User Interfaces

Resizing a Window. COSC 3461: Module 5B. What is Widget Layout? Size State Transitions. What is Widget Layout? Hierarchical Widget Layout.

Transcription:

Java Programming in Java Java Swing Programming

Java Swing Design Goals The overall goal for the Swing project was: To build a set of extensible GUI components to enable developers to more rapidly develop powerful Java front ends for commercial applications. The design goals mandated that Swing would: 1. Be implemented entirely in Java to promote cross-platform consistency and easier maintenance. 2. Provide a single API capable of supporting multiple look-and-feels so that developers and end-users would not be locked into a single look-and-feel. Enable the power of model-driven programming without requiring it in the highest-level API. 3. Adhere to JavaBeans design principles to ensure that components behave well in IDEs and builder tools. 4. Provide compatibility with AWT APIs where there is overlapping, to leverage the AWT knowledge base and ease porting. Ref.: Sun Microsystems

Contents Introduction History JFC Java Foundation Classes What makes Swing so special? Lightweight Components PLAF MVC Delegation Event Model How to use Swing Components JComponent Layouts Example Summary

AWT Problems with the AWT AWT is not functional enough for full scale applications small widget library widgets have only basic functionality extensions commonly needed AWT Components rely on native peers no platform independency: widgets do not perform exactly the same on different platforms Widget = Window Gadget

AWT vs. Swing APIs Java AWT (Abstract Windowing Toolkit) Package: java.awt GUI functionality (graphical user interface) Component libraries: labels, buttons, textfields, etc. (platform dependent) Helper classes: event handling, layout managers (window layouts), etc. The Swing APIs Package: javax.swing Greater platform independence - portable "look and feel" (buttons, etc.) AWT and Swing are part of the JFC (Java Foundation Classes) Easy upgrading using "J": Applet JApplet Button JButton

Classes, Packages java.lang.object java.awt.component java.awt.container java.awt.panel java.applet.applet Component Container Panel Applet

Class JApplet java.lang.object java.awt.component java.awt.container java.awt.panel java.applet.applet javax.swing.japplet Class JApplet: An extended version of java.applet.applet that adds support for the JFC/Swing component architecture. Component Container Panel Applet JApplet

Classes, Packages Syntax: public class Name extends java.applet.applet {... } imported package class

JFC Java Foundation Classes AWT Swing Accessibility 2D API Drag and Drop AWT: the original GUI toolkit Swing: the new GUI toolkit Accessibility: tools to develop support for users challenged by traditional UI s 2D API: classes for more complex use of painting, shape, colour, and fonts Drag and Drop: tools for implementing the transfer of information between Java applications and native applications

JFC Java Foundation Classes consist of: Abstract Windowing Toolkit (AWT) Swing Since JDK1.2 Lightweight Components (without OS support) The Swing Class library based on AWT, expansion with components and the Model-View-Controller (MVC) Java 2D Image Design, 2D Graphics, GUI Design (Graphical User Interfaces) Drag and Drop Drag and Drop with mouse control Accessibility Interface to include additional I/O-devices. continued

JFC Java Foundation Classes consist of: Abstract Windowing Toolkit (AWT) Heavyweight Components (using OS-based function) Includes three elements Components UI elements Example: Buttons, Labels,... Container Grouping of UI elements Example: Window Layout Manager Decide how components will be organized and accessed in the container Example: Border Layout (Nord, Süd, Ost, West, Center)

AWT Architecture of the Swing Class Library OS-independent part of API OS-dependent part of API Motif ButtonPeer Button ButtonPeer Windows ButtonPeer The button peer interface specifies the methods that all implementations of Abstract Window Toolkit buttons must define.

Swing Components Concept of Java peers: When instantiating an AWT component the native environment creates the component. User sees the native look-and-feel, component acts like the native control. Peer: native code that provides this look-and-feel. Each platform has its own set of peers. Example: A Java button appears (and acts) as a Windows button under Windows, as a Macintosh button under Macintosh, and as a Unix button under Unix. Problem: Not all native controls respond in the same way to the same events, so that a Java program shows different behavior under different Java AWT environments. Solution: Lightweight components, written entirely in Java. Swing provides a set of pure Java lightweight components, ensuring better cross-platform compatibility. A lightweight component subclasses java.awt.component - implementing the look-and-feel of the component in Java rather than delegating the lookand-feel to a native peer.

AWT Architecture of the Swing Class Library Heavyweight Komponenten (AWT) Interface of the components with so-called peer-objects, that have to be rewritten for each operationg system (OS) Lightweight Komponenten (Swing) Directly programmed in Java Container Classes (Frame, Dialog, Window, Applet) come from AWT and were expanded: JFrame, JDialog, JWindow, JApplet as toplevel Container All lightweight components can directly be drawn in the Frame.

AWT AWT - Heavyweight Components Rectangular Opaque Always drawn over top of lightweight components Rely on native peers Look and Feel tied to operating system functionality determined by operating system faster, because the OS handles the work

Swing Swing - Lightweight Components Swing uses lightweight components It uses a variant of the Model View Controller Architecture (MVC) It has Pluggable Look And Feel (PLAF) It uses the Delegation Event Model

Swing Swing - Lightweight Components Any shape Transparent portions Overlap Mouse events fall through transparent portions Do not rely on native peers Look and Feel drawn at runtime so can vary functionality is the same on all platforms slower because Java has to do the work

Swing Lightweight vs. Heavyweight

Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller (MVC) design that dates back to SmallTalk. MVC architecture calls for a visual application to be broken up into three separate parts: A model that represents the data for the application. The view that is the visual representation of that data. A controller that takes user input on the view and translates that to changes in the model.

Model View Controller Independent MVC-elements: Model state data for each component different data for different models View how the component looks onscreen, displays the data Controller dictates how the component reacts to I/O events Controller Model View

Model View Controller State Query Change Notification Model Encapsulates Encapsulates application application state state Responds Responds to to state state queries queries Exposes Exposes application application functionality functionality Notifies Notifies views views of of changes changes State Change View Renders Renders the the models models Requests Requests updates updates from from models models Sends Sends user user gestures gestures to to controller controller Allows Allows controller controller to to select select view view View Selection User Gestures Controller Defines Defines application application behaviour behaviour Maps Maps user user actions actions to to model model updates updates Selects Selects view view for for response response One One for for each each functionality functionality Method Invocations Events

Modified MVC UI Delegate The Java Swing Architecture uses a modified MVC-model in which the "view" and "controller" are combined in a so-called UI object (User-interface). Component M UI Object UI Manager The UI Object is also called the "UI delegate" or the "delegate object". The modified MVC-model is also referred to a "separable model architecture".

Modified MVC UI Delegate Example: JButton ButtonUI Controller View JButton Button Model

Modified MVC UI Delegate Example: JButton - Pluggable Look and Feel(PLAF) ButtonUI Controller View UIFactory JButton Button Model

Modified MVC UI Delegate Swing Look & Feel AWT Look & Feel JComponent (MVC Model) Component MVC View MVC Controller Peer (native) ComponentUI (Delegate) Platform Widget (native)

Swing Components and Container

Swing Packages Important Swing Packages: javax.accessibility Provides accessibility for disabled persons javax.swing Provides a set of "lightweight" (all-java language) components that, to the maximum degree possible, work the same on all platforms. javax.swing.border Provides classes and interface for drawing specialized borders around a Swing component. javax.swing.event Provides for events fired by Swing components. javax.swing.plaf Provides user interface objects built according to the Basic look-and-feel.

Swing Components: JComponent, JFrame Swing components are similar to components in the Abstract Windowing Toolkit (AWT) but are subclasses of the JComponent class. common root of most of the Swing GUI classes guiding framework for GUI objects extends java.awt.container class Swing applications are subclasses of the class JFrame.

Swing Components Swing components and containers are added to a content pane which represents the full frame area. The content pane is added to the frame.

RootPane Structure of a RootPane Menu ContentPane GlasPane LayeredPane

Swing Components AbstractButton ButtonGroup ImageIcon JApplet JFrame JButton JCheckBox JComboBox JLabel Abstract Superclass for Swing buttons. Encapsulates a mutually exclusive set of buttons. Encapsulates an icon. The Swing version of Applet. The Swing frame that is more sophisticated than the AWT frame. We can add components in layers, add a menu bar, or paint over the component through a component called a glass pane. The Swing push button class. The Swing check box class. Encapsulates a combo box (a combination of a drop-down list and text field). The Swing version of a Label. continued

Swing Components JOptionPane JPasswordField JRadioButton JScrollPane JTabbedpane JTable JTextField JTree The option panes in Swing. Option panes are dialog boxes that display some information to the user or get confirmation from the user so that the program can be executed further based on the choice the user makes. A text field that does not display the text entered into it, but displays the specified character, e.g. * as input is given into the field. The Swing version of a radio button. Encapsulates a rectangular area in which a component may be viewed. Encapsulates a tabbed window. Encapsulates a table-based control. The Swing version of a text field. Encapsulate a tree-based control.

Look and Feel PLAF - Pluggable Look and Feel Swing supplies three choices for look and feel: - Metal style - Swing's default cross-platform LAF - Motif X-Windows system style LAF - Windows style LAF - Mac style (not part of the JDK) - New styles can be designed - Style can be reset/changed at runtime Method: setlookandfeel(plaf)

Sample Program - PLAF Windows Look-and-Feel Motif Look-and-Feel Metal Look-and-Feel Java SwingExamp01

Sample Program - PLAF import java.awt.event.*; import java.awt.*; import javax.swing.*; public class SwingExamp01 extends Jframe implements ActionListener { private static final String[] MONTHS = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; public static void main(string[] args) { SwingExamp01 frame = new SwingExamp01(); frame.setlocation(100, 100); frame.pack(); frame.setvisible(true); }

Sample Program - PLAF public SwingExamp01() { super("our first Swing-Program"); //Panel zur Namenseingabe hinzufügen JPanel namepanel = new JPanel(); JLabel label = new JLabel( "Name:", new ImageIcon("triblue.gif"), SwingConstants.LEFT ); namepanel.add(label); JTextField tf = new JTextField(30); tf.settooltiptext("enter your name"); namepanel.add(tf); namepanel.setborder(borderfactory.createetchedborder()); getcontentpane().add(namepanel, BorderLayout.NORTH); //Monatsliste hinzufügen JList list = new JList(MONTHS); list.settooltiptext("select the month of your birthday"); getcontentpane().add(new JScrollPane(list), BorderLayout.CENTER); //Panel mit den Buttons hinzufügen JPanel buttonpanel = new JPanel(); JButton button1 = new JButton("Metal");

Sample Program - PLAF } button1.addactionlistener(this); button1.settooltiptext("metal-look-and-feel"); buttonpanel.add(button1); JButton button2 = new JButton("Motif"); button2.addactionlistener(this); button2.settooltiptext("motif-look-and-feel"); buttonpanel.add(button2); JButton button3 = new JButton("Windows"); button3.addactionlistener(this); button3.settooltiptext("windows-look-and-feel"); buttonpanel.add(button3); buttonpanel.setborder(borderfactory.createetchedborder()); getcontentpane().add(buttonpanel, BorderLayout.SOUTH); //Windows-Listener addwindowlistener(new WindowClosingAdapter(true));

Sample Program - PLAF public void actionperformed(actionevent event) { String cmd = event.getactioncommand(); try { //PLAF-Klasse auswählen String plaf = "unknown"; if (cmd.equals("metal")) { plaf = "javax.swing.plaf.metal.metallookandfeel"; } else if (cmd.equals("motif")) { plaf = "com.sun.java.swing.plaf.motif.motiflookandfeel"; } else if (cmd.equals("windows")) { plaf = "com.sun.java.swing.plaf.windows.windowslookandfeel"; }

Sample Program - PLAF } } //LAF umschalten UIManager.setLookAndFeel(plaf); SwingUtilities.updateComponentTreeUI(this); } catch (UnsupportedLookAndFeelException e) { System.err.println(e.toString()); } catch (ClassNotFoundException e) { System.err.println(e.toString()); } catch (InstantiationException e) { System.err.println(e.toString()); } catch (IllegalAccessException e) { System.err.println(e.toString()); }

Layout Managers Layout Managers are used to arrange components according to predefined patterns and to allow more complex UIs.

Layout Managers Layout-Manager are used to render a UI: position and organize components (UI, container). Each container has a reference to an object that implements the interface LayoutManager. It can be overwritten with setlayout(layoutmanager. Components can be added to the container with add(component) and are ordered in accordingly. When top-level containerare used both methods have to called on the ContentPane.

Layout Managers - Flow Layout The Flow Layout arranges components in a left-to-right flow, much like lines of text in a paragraph. Flow layouts are typically used to arrange buttons in a panel. It will arrange buttons left to right until no more buttons fit on the same line. Each line is centered.

Layout Managers - Flow Layout import java.awt.*; import java.awt.event.*; public class Flow extends Frame { public static void main(string[] args) { Flow wnd = new Flow(); wnd.setvisible(true); } } public Flow() { super("test FlowLayout"); addwindowlistener(new WindowClosingAdapter(true)); //Layout setzen und Komponenten hinzufügen setlayout(new FlowLayout(FlowLayout.LEFT,20,20)); add(new Button("Button 1")); add(new Button("Button 2")); add(new Button("Button 3")); add(new Button("Button 4")); add(new Button("Button 5")); pack(); }

Layout Managers - Border Layout The BorderLayout lays out a container, arranging and resizing its components to fit in five regions: north, south, east, west, and center. Each region may contain no more than one component, and is identified by a corresponding constant: NORTH, SOUTH, EAST, WEST, and CENTER.

Layout Managers - Grid Layout The GridLayout lays out a container's components in a rectangular grid. The container is divided into equal-sized rectangles, and one component is placed in each rectangle.

Layout Managers - Grid Layout import java.awt.*; import java.awt.event.*; public class Grid extends Frame { public static void main(string[] args) { Grid wnd = new Grid(); wnd.setvisible(true); } } public Grid() { super("test GridLayout"); addwindowlistener(new WindowClosingAdapter(true)); //Layout setzen und Komponenten hinzufügen setlayout(new GridLayout(4,2)); add(new Button("Button 1")); add(new Button("Button 2")); add(new Button("Button 3")); add(new Button("Button 4")); add(new Button("Button 5")); add(new Button("Button 6")); add(new Button("Button 7")); pack(); }

Layout Managers - Grid Bag Layout Example: GridLayout Java

Layout Managers - Grid Bag Layout The GridBagLayout The GridBagLayout class is a flexible layout manager that aligns components vertically and horizontally, without requiring that the components be of the same size. Each GridBagLayout object maintains a dynamic, rectangular grid of cells, with each component occupying one or more cells, called its display area.

Layout Managers - Grid Bag Layout

Layout Managers Further Layout Manager CardLayout Can order several containers in a higher container, produces a stack of containers that are organized on top of each other. BoxLayout Similar to the FlowLayout. The components that are added to a container are ordered from top to bottom or from left to right. OverlayLayout Allows to stack components (overlaying them). ViewportLayout A viewport is a visible area of a scollable window. NullLayout Components can be positioned using predefined coordinates (absolute positioning).

NullLayout import java.awt.*; import java.awt.event.*; public class NullLayout extends Frame { public static void main(string[] args) { NullLayout wnd = new NullLayout(); wnd.setvisible(true); } } public NullLayout() { super("dialogelemente ohne Layoutmanager"); addwindowlistener(new WindowClosingAdapter(true)); //Layout setzen und Komponenten hinzufügen setsize(300,250); setlayout(null); for (int i = 0; i < 5; ++i) { Button button = new Button("Button"+(i+1)); button.setbounds(10+i*35,40+i*35,100,30); add(button); } } Java

Swing MVC Advanced Java MVC Example

Swing MVC Example: Simple Calculator Main program: The main program initializes everything and ties everything together. View: creates the display, calls the model as necessary to get information. Controller: Responds to user requests. It is implemented as an Observer pattern -- the Controller registers listeners that are called when the View detects a user interaction. Based on the user request, the Controller calls methods in the View and Model to accomplish the requested action. Model: independent of the user interface, performs the basic calculator function.

Swing MVC Main program: import javax.swing.*; public class CalcMVC { public static void main(string[] args) { CalcModel model = new CalcModel(); CalcView view = new CalcView(model); CalcController controller = new CalcController(model, view); } } view.setvisible(true); Java Create model, view, and controller