Download presentation
Presentation is loading. Please wait.
1
THE SWING UI TOOLKIT Mostly from “The Swing Connection”The Swing Connection
2
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing2 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
3
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing3 OTHER APIs
4
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing4 UI COMPONENTS
5
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing5 BUTTONS
6
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing6 MENUS JMenuBar
7
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing7 OTHER COMPONENTS JApplet Border Interface JColorChooser JComboBox ImageIcon JDialog JFileChooser JInternalFrame
8
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing8 OTHER COMPONENTS JList JOptionPane JScrollBar JScrollPane JSlider JSplitPane JTabbedPane JLabel
9
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing9 OTHER COMPONENTS JTable JTextArea JTextField JToolBar JToolTip JTree
10
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing10 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
11
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing11 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
12
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing12 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
13
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing13 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);
14
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing14 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
15
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing15 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()); } });
16
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing16 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()); } } });
17
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing17 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!
18
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing18 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)
19
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing19 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)
20
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing20 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
21
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing21 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
22
PROGRAMMING GRAPHICAL USER INTERFACES Lecture 4: Swing22 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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.