Sei sulla pagina 1di 22

THE SWING UI TOOLKIT

Mostly from The Swing Connection

PROGRAMMING GRAPHICAL USER INTERFACES

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
Lecture 4: Swing 2

OTHER APIs

PROGRAMMING GRAPHICAL USER INTERFACES

Lecture 4: Swing

UI COMPONENTS

PROGRAMMING GRAPHICAL USER INTERFACES

Lecture 4: Swing

BUTTONS

PROGRAMMING GRAPHICAL USER INTERFACES

Lecture 4: Swing

MENUS

JMenuBar

PROGRAMMING GRAPHICAL USER INTERFACES

Lecture 4: Swing

PROGRAMMING GRAPHICAL USER INTERFACES

OTHER COMPONENTS

JApplet

Border Interface
JColorChooser

JComboBox

ImageIcon

JInternalFrame
JDialog JFileChooser

Lecture 4: Swing

PROGRAMMING GRAPHICAL USER INTERFACES

OTHER COMPONENTS

JLabel

JList

JScrollBar

JScrollPane

JOptionPane

JSlider

JSplitPane
Lecture 4: Swing

JTabbedPane 8

PROGRAMMING GRAPHICAL USER INTERFACES

OTHER COMPONENTS

JTable JTextArea

JTextField JToolBar

JToolTip
JTree

Lecture 4: Swing

PROGRAMMING GRAPHICAL USER INTERFACES

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

Lecture 4: Swing

10

PROGRAMMING GRAPHICAL USER INTERFACES

THE UI DELEGATE
No reason to separate controller and view A separate UI object for defining the visual representation and controller behaviour the UI delegate

Lecture 4: Swing

11

PROGRAMMING GRAPHICAL USER INTERFACES

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

Lecture 4: Swing

12

PROGRAMMING GRAPHICAL USER INTERFACES

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);
Lecture 4: Swing 13

PROGRAMMING GRAPHICAL USER INTERFACES

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

Lecture 4: Swing

14

PROGRAMMING GRAPHICAL USER INTERFACES

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

Lecture 4: Swing

15

PROGRAMMING GRAPHICAL USER INTERFACES

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

Lecture 4: Swing

16

PROGRAMMING GRAPHICAL USER INTERFACES

IGNORING MODELS
Most components provide API to the model directly E.g. JSliders method
public int getValue() { return getModel().getValue(); }

Program can simply do the following


JSlider slider = new JSlider(); int value = slider.getValue();

So, wheres the model, anyway!

Lecture 4: Swing

17

PROGRAMMING GRAPHICAL USER INTERFACES

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)

Lecture 4: Swing

18

PROGRAMMING GRAPHICAL USER INTERFACES

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)

Lecture 4: Swing

19

THE SWING PACKAGES (contd)


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)

PROGRAMMING GRAPHICAL USER INTERFACES

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

Lecture 4: Swing

20

THE SWING PACKAGES (contd)


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

PROGRAMMING GRAPHICAL USER INTERFACES

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

Lecture 4: Swing

21

PROGRAMMING GRAPHICAL USER INTERFACES

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
Lecture 4: Swing java.lang.Object

java.awt.Component

java.awt.Container

javax.swing.JComponent

22

Potrebbero piacerti anche