No Slide Title

Download Report

Transcript No Slide Title

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
3
Lecture 4: Swing
PROGRAMMING GRAPHICAL USER INTERFACES
OTHER APIs
4
Lecture 4: Swing
PROGRAMMING GRAPHICAL USER INTERFACES
UI COMPONENTS
5
Lecture 4: Swing
PROGRAMMING GRAPHICAL USER INTERFACES
BUTTONS
JMenuBar
6
Lecture 4: Swing
PROGRAMMING GRAPHICAL USER INTERFACES
MENUS
PROGRAMMING GRAPHICAL USER INTERFACES
OTHER COMPONENTS
JApplet
Border Interface
JColorChooser
JComboBox
ImageIcon
JInternalFrame
JDialog
Lecture 4: Swing
JFileChooser
7
PROGRAMMING GRAPHICAL USER INTERFACES
OTHER COMPONENTS
JLabel
JList
JScrollPane
JOptionPane
JSplitPane
Lecture 4: Swing
JScrollBar
JSlider
JTabbedPane
8
PROGRAMMING GRAPHICAL USER INTERFACES
OTHER COMPONENTS
JTable
JTextArea
JTextField
JToolBar
JToolTip
JTree
Lecture 4: Swing
9
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. 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!
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
PROGRAMMING GRAPHICAL USER INTERFACES
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
Lecture 4: Swing
20
PROGRAMMING GRAPHICAL USER INTERFACES
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
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