Top Banner
THE SWING UI TOOLKIT Mostly from “The Swing Connection
22

THE SWING UI TOOLKIT

Jan 13, 2016

Download

Documents

daxia

THE SWING UI TOOLKIT. Mostly from “ The Swing Connection ”. SWING TOOLKIT. 100% Java implementation of components Pluggable Look & Feel customizable for different environments, or use Java L&F in every environment Lightweight components no separate (child)windows for components - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: THE SWING UI TOOLKIT

THE SWING UI TOOLKIT

Mostly from “The Swing Connection”

Page 2: THE SWING UI TOOLKIT

Lecture 4: Swing 2

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

SWING TOOLKIT• 100% Java implementation of components

• Pluggable Look & Feel– customizable for different environments, or

– use Java L&F in every environment

• Lightweight components– no separate (child)windows for components

– allows more variation on component structure

– makes L&F possible

• Three parts– component set (subclasses of JComponent)

– support classes

– interfaces

Page 3: THE SWING UI TOOLKIT

Lecture 4: Swing 3

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

OTHER APIs

Page 4: THE SWING UI TOOLKIT

Lecture 4: Swing 4

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

UI COMPONENTS

Page 5: THE SWING UI TOOLKIT

Lecture 4: Swing 5

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

BUTTONS

Page 6: THE SWING UI TOOLKIT

Lecture 4: Swing 6

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

MENUS

JMenuBar

Page 7: THE SWING UI TOOLKIT

Lecture 4: Swing 7

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

OTHER COMPONENTS

JApplet Border Interface

JColorChooserJComboBox

ImageIcon

JDialogJFileChooser

JInternalFrame

Page 8: THE SWING UI TOOLKIT

Lecture 4: Swing 8

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

OTHER COMPONENTS

JList

JOptionPane

JScrollBar

JScrollPane JSlider

JSplitPaneJTabbedPane

JLabel

Page 9: THE SWING UI TOOLKIT

Lecture 4: Swing 9

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

OTHER COMPONENTS

JTable

JTextArea

JTextField

JToolBar

JToolTip

JTree

Page 10: THE SWING UI TOOLKIT

Lecture 4: Swing 10

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

ARCHITECTURE• Goals:

– entirely on Java

– pluggable L&F

– model-driven programming

– JavaBeans

– compability with AWT

• Use MVC?– Model represents the data

– View as a visual representation of the data

– Controller takes input and translates it to changes in data

Page 11: THE SWING UI TOOLKIT

Lecture 4: Swing 11

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

THE UI DELEGATE• No reason to separate controller and view

• A separate UI object for defining the visualrepresentation and controller behaviour

the UI delegate

Page 12: THE SWING UI TOOLKIT

Lecture 4: Swing 12

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

MODELS• Data-centric applications

• Separate model interface for every component– GUI-state models

• up-down state in JButton and subclasses

– application data models• selection state in JToggleButton and subclasses

• Application programmer can implement his/her own data models for existing components

• Shared model definitions

Page 13: THE SWING UI TOOLKIT

Lecture 4: Swing 13

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

MODEL SEPARATION

• JSlider uses BoundedRangeModel– public JSlider(int orientation, int min, int max, int value) {

checkOrientation(orientation); this.orientation = orientation; this.model = new DefaultBoundedRangeModel(value, 0, min, max); this.model.addChangeListener(changeListener); updateUI();}

• Calling setModel, application can replace the default– JSlider slider = new JSlider();

BoundedRangeModel myModel = new DefaultBoundedRangeModel() { public void setValue(int n) { System.out.println("SetValue: "+ n); super.setValue(n); } });slider.setModel(myModel);

Page 14: THE SWING UI TOOLKIT

Lecture 4: Swing 14

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

CHANGE NOTIFICATION• Models implement methods for adding and

removing listeners

• Lightweight notification– only notify

– listener queries about the changes

– e.g. scrollabar dragged

• Stateful notification– event described the change

– for complex data models

– e.g. changes in the column of table

Page 15: THE SWING UI TOOLKIT

Lecture 4: Swing 15

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

LIGHTWEIGHT NOTIFICATION• ChangeListener with one single method

– public void stateChanged(ChangeEvent e);

• Listening to JSlider– JSlider slider = new JSlider();

BoundedRangeModel model = slider.getModel();model.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { // need to query the model to get updated value... BoundedRangeModel m = (BoundedRangeModel)e.getSource(); System.out.println("model changed: " + m.getValue()); }});

Page 16: THE SWING UI TOOLKIT

Lecture 4: Swing 16

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

STATEFUL NOTIFICATION• Tracking JList selection

– String items[] = {"One", "Two", "Three");JList list = new JList(items);ListSelectionModel sModel = list.getSelectionModel();sModel.addListSelectionListener (new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { // get change information directly // // from the event instance... if (!e.getValueIsAdjusting()) { System.out.println("selection changed: " + e.getFirstIndex()); } } });

Page 17: THE SWING UI TOOLKIT

Lecture 4: Swing 17

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

IGNORING MODELS• Most components provide API to the model

directly

• E.g. JSlider’s method– public int getValue() {

return getModel().getValue();}

• Program can simply do the following– JSlider slider = new JSlider();

int value = slider.getValue();

• So, where’s the “model,” anyway!

Page 18: THE SWING UI TOOLKIT

Lecture 4: Swing 18

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

SETTING LOOK & FEEL• To set a particular L&F (here CDE/Motif), write

– UIManager.setLookAndFeel( "com.sun.java.swing.plaf.motif.MotifLookAndFeel” );

• To set the appropriate L&F, whatever the current environment, write– UIManager.setLookAndFeel(

UIManager.getSystemLookAndFeelClassName() );

• Do the above preferably at the end of the program (before instantiating any components)

Page 19: THE SWING UI TOOLKIT

Lecture 4: Swing 19

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

THE SWING PACKAGES• The Accessibility package (javax.accessibility)

– provides support for supporting the screen access products for people with disabilities

– Swing has full support for accessibility

• javax.swing– contains nearly all of the Swing components

– notable exception is JTextComponent (in javax.swing.text)

• javax.swing.border– in need for customized borders, take a look

• javax.swing.event– includes the additional event classes (not found in java.awt.event)

Page 20: THE SWING UI TOOLKIT

Lecture 4: Swing 20

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

THE SWING PACKAGES (cont’d)• javax.swing.plaf

– classes for providing the L&F capabilities

– also javax.swing.plaf.basic including the default L&F classes

– the current specialized L&F:s• javax.swing.plaf.metal

• javax.swing.plaf.motif (or com.sun.java.swing.plaf.motif)

• javax.swing.plaf.windows (or com.sun.java.swing.plaf.windows)

– also javax.swing.plaf.multi for mixing multiple L&F:s

• javax.swing.table– including support classes for managing tables

• javax.swing.tree– support classes for managing trees

Page 21: THE SWING UI TOOLKIT

Lecture 4: Swing 21

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

THE SWING PACKAGES (cont’d)• javax.swing.text

– support classes for text editing

– Document classes

– JTextComponent (superclass for all text components)

– see also separate format packages• javax.swing.text.html• javax.swing.text.rtf

• javax.swing.undo– classes for supporting undo/redo operations

Page 22: THE SWING UI TOOLKIT

Lecture 4: Swing 22

PR

OG

RA

MM

ING

GR

AP

HIC

AL

US

ER

INT

ER

FA

CE

S

JComponent• An abstract root class of almost all

of Swing components

• Provides– pluggable L&F

– extensibility

– smart trapping of keyboard events (see javax.swing.KeyStroke)

– customizable borders

– easy resizing

– tool tips

– autoscrolling

– support for debugging

– support for accessibility

– support for localization

java.lang.Object

java.awt.Component

java.awt.Container

javax.swing.JComponent