Advanced Java Java Swing...

54
Fachbereich Informatik und Elektrotechnik Programming in Java, Helmut Dispert Java Swing Advanced Java Java Swing Programming

Transcript of Advanced Java Java Swing...

Page 1: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Java Swing

Advanced Java

Java SwingProgramming

Page 2: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Java Swing

Design GoalsThe 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

Page 3: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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

Page 4: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

AWT

Widget = Window Gadget

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

Page 5: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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

Easy upgrading using "J": Applet →→→→ JApplet

Button →→→→ JButton

AWT and Swing are part of the JFC (Java Foundation Classes)

Page 6: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Classes, Packages

Component

Container

Panel

Applet

java.lang.Object

java.awt.Component

java.awt.Container

java.awt.Panel

java.applet.Applet

Page 7: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Class JApplet

Component

Container

Panel

Applet

java.lang.Object

java.awt.Component

java.awt.Container

java.awt.Panel

java.applet.Applet

javax.swing.JApplet

JApplet

Class JApplet:An extended version of java.applet.Applet

that adds support for the JFC/Swingcomponent architecture.

Page 8: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Classes, Packages

public class Name extends java.applet.Applet

{

...

}

Syntax:

imported package

class

Page 9: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

JFC

• 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

Java Foundation Classes

AWT

Swing

Accessibility

2D API

Drag and Drop

Page 10: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

JFC

Java Foundation Classesconsist of:

• Abstract Windowing Toolkit (AWT)

• Swing

– Ab JDK1.2

– Leichtgewichtige Komponenten (ohne Betriebsystem Support)

Die Swing-Klassenbibliothek baut auf AWT auf und erweitert diese

um Komponenten und dem Model-View-Controller (MVC)

• Java 2D

– Erstellen und bearbeiten von Bildern und 2D Grafiken

• Drag and Drop

– Verschieben mit der Maus

• Accessibility

– Schnittstelle zur Einbindung zusätzlicher Ein- und Ausgabegeräte.

continued

Page 11: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

JFC

Java Foundation Classesconsist of:

• Abstract Windowing Toolkit (AWT)

– Schwergewichtige Komponenten (verwenden betriebsystemnahe Funktionen)

– Umfasst drei Elemente

• Komponenten

– Oberflächenelemente

– Beispiel: Buttons, Labels, ...

• Container

– Gruppieren und enthalten Oberflächenelemente

– Beispiel: Fenster

• Layout Manager

– Legen fest, wie die Komponenten im Container angesprochen werden können

– Beispiel: Border Layout (Nord, Süd, Ost, West, Center)

Page 12: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

AWT

Architecture of the Swing Class Library

OS-independentpart of API

OS-dependentpart of API

Button

WindowsButtonPeer

MotifButtonPeer

ButtonPeer

The button peer interface specifies the methods that all implementations of Abstract Window Toolkit buttons must define.

Page 13: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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 look-and-feel to a native peer.

Page 14: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

AWT

• Heavyweight Komponenten (AWT)

– Die Anbindung der Komponenten geschieht mit sogenannten Peer-Objekten, welche für jedes Betriebsystem neu geschrieben werden.

• Lightweight Komponenten (Swing)

– Werden von Java selbst gezeichnet

– Die Containerklassen (Frame, Dialog, Window, Applet) wurden aus AWT übernommen und erweitert:

• JFrame, JDialog, JWindow, JApplet als toplevel Container

• Alle leichtgewichtigen Komponenten können direkt in den Frame gezeichnet werden.

Architecture of the Swing Class Library

Page 15: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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

Page 16: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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

Page 17: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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

Page 18: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Swing

Lightweight vs. Heavyweight

Page 19: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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.

Page 20: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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

ControllerModel

View

Page 21: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Model View Controller

Model

• Encapsulates application state

• Responds to state queries

• Exposes application functionality

• Notifies views of changes

Model

• Encapsulates application state

• Responds to state queries

• Exposes application functionality

• Notifies views of changes

Controller

• Defines application behaviour

• Maps user actions to model updates

• Selects view for response

• One for each functionality

Controller

• Defines application behaviour

• Maps user actions to model updates

• Selects view for response

• One for each functionality

View

• Renders the models

• Requests updates from models

• Sends user gestures to controller

• Allows controller to select view

View

• Renders the models

• Requests updates from models

• Sends user gestures to controller

• Allows controller to select view

StateQuery

ChangeNotification

StateChange

View Selection

User Gestures

Method Invocations

Events

Page 22: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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

UIObject

MUI

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

Page 23: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Modified MVC – UI Delegate

Example: JButton

ButtonUI

ButtonModel

Controller View

JButton

Page 24: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

ButtonUI

Modified MVC – UI Delegate

ButtonModel

Controller View

JButton

Example: JButton - Pluggable Look and Feel(PLAF)

UIFactory

Page 25: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

ComponentUI (Delegate)

Modified MVC – UI Delegate

JComponent(MVC Model)

MVCController

MVCView

Swing Look & Feel

Component

PlatformWidget(native)

Peer(native)

AWT Look & Feel

Page 26: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Swing Components and Container

Page 27: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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.

Page 28: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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.

Page 29: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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.

Page 30: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

RootPane

Structure of a RootPane

GlasPane

Menu

ContentPane

LayeredPane

Page 31: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Swing Components

The Swing version of a Label.JLabel

Encapsulates a combo box (a combination of a

drop-down list and text field).

JComboBox

The Swing check box class.JCheckBox

The Swing push button class.JButton

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.

JFrame

The Swing version of Applet.JApplet

Encapsulates an icon.ImageIcon

Encapsulates a mutually exclusive set of buttons.ButtonGroup

Abstract Superclass for Swing buttons.AbstractButton

continued

Page 32: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Swing Components

The Swing version of a radio button. JRadioButton

Encapsulates a rectangular area in which a

component may be viewed.

JScrollPane

Encapsulates a tabbed window. JTabbedpane

Encapsulates a table-based control. JTable

The Swing version of a text field. JTextField

Encapsulate a tree-based control. JTree

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.

JPasswordField

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.

JOptionPane

Page 33: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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)

Page 34: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Sample Program - PLAF

WindowsLook-and-Feel

MotifLook-and-Feel

MetalLook-and-Feel

SwingExamp01

Java

Page 35: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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

}

Page 36: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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");

Page 37: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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

}

Page 38: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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";

}

Page 39: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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());

}

}

}

Page 40: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Layout Managers

Layout Managers

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

Page 41: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Layout Managers

Mit einem Layout-Manager werden die Komponenten nach bestimmten Vorgaben auf einer Bedienoberfläche bzw. in einem Container angeordnet.

– Jeder Container hat eine standardmässige Referenz auf ein Objekt, das ein Interface LayoutManagerimplementiert.

– Mit setLayout(LayoutManager) kann dieser überschrieben werden.

– Komponenten werden mit add(Component) dem Container hinzugefügt und in dieser Reihenfolge angeordnet.

– Bei Top-Level Containern muss der Aufruf der beiden Methoden auf der ContentPane erfolgen.

Page 42: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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.

Page 43: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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ügensetLayout(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 - Flow Layout

Page 44: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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.

Page 45: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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.

Page 46: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Layout Managers - Grid Layoutimport java.awt.*;import java.awt.event.*;

public class Gridextends 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ügensetLayout(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();

}}

Page 47: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Layout Managers - Grid Bag Layout

Example:GridLayout

Java

Page 48: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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.

Page 49: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Layout Managers - Grid Bag Layout

Page 50: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Layout Managers

Further Layout Manager• CardLayout

• Kann mehrere Container in einem übergeordneten Container anordnen, erzeugt einen Stapel von Containern, die hintereinander liegen.

• BoxLayout• Ähnlich wie FlowLayout. Die zu einem Container hinzugefügten

Komponenten werden von oben nach unten oder von links nach rechts angeordnet.

• OverlayLayout• Ermöglicht das Stapeln von Komponenten bzw. das

Übereinanderlegen.• ViewportLayout

• Ein Viewport ist ein sichtbarer Bereich eines scrollbaren Fensters.

• NullLayout• Komponenten können durch Vorgabe fester Koordinaten

platziert werden (absolute Positionierung).

Page 51: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

NullLayoutimport 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

Page 52: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

Swing MVC

Advanced Java

MVC Example

Page 53: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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.

Page 54: Advanced Java Java Swing Programmingdispert.international-university.eu/lecture-files/Java_Swing.pdf · Model View Controller Roots in MVC Swing architecture is rooted in the model-view-controller

Fachbereich Informatik und Elektrotechnik

Programming in Java, Helmut Dispert

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

}

}

Createmodel, view, and controllerJava