Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
Lecture 4: Swing
UI COMPONENTS
Lecture 4: Swing
BUTTONS
Lecture 4: Swing
MENUS
JMenuBar
Lecture 4: Swing
OTHER COMPONENTS
JApplet
Border Interface
JColorChooser
JComboBox
ImageIcon
JInternalFrame
JDialog JFileChooser
Lecture 4: Swing
OTHER COMPONENTS
JLabel
JList
JScrollBar
JScrollPane
JOptionPane
JSlider
JSplitPane
Lecture 4: Swing
JTabbedPane 8
OTHER COMPONENTS
JTable JTextArea
JTextField JToolBar
JToolTip
JTree
Lecture 4: Swing
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
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
MODELS
Data-centric applications Separate model interface for every component
GUI-state models
up-down state in JButton and subclasses
Application programmer can implement his/her own data models for existing components Shared model definitions
Lecture 4: Swing
12
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(); }
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
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
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
IGNORING MODELS
Most components provide API to the model directly E.g. JSliders method
public int getValue() { return getModel().getValue(); }
Lecture 4: Swing
17
Do the above preferably at the end of the program (before instantiating any components)
Lecture 4: Swing
18
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
javax.swing.table
including support classes for managing tables
javax.swing.tree
support classes for managing trees
Lecture 4: Swing
20
javax.swing.undo
classes for supporting undo/redo operations
Lecture 4: Swing
21
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