1 / 22

THE SWING UI TOOLKIT

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

daxia
Download Presentation

THE SWING UI TOOLKIT

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. THE SWING UI TOOLKIT Mostly from “The Swing Connection”

  2. 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. OTHER APIs

  4. UI COMPONENTS

  5. BUTTONS

  6. MENUS JMenuBar

  7. OTHER COMPONENTS Border Interface JApplet JColorChooser JComboBox ImageIcon JInternalFrame JDialog JFileChooser

  8. OTHER COMPONENTS JLabel JList JScrollBar JScrollPane JSlider JOptionPane JSplitPane JTabbedPane

  9. OTHER COMPONENTS JTable JTextArea JTextField JToolBar JToolTip JTree

  10. 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. THE UI DELEGATE • No reason to separate controller and view • A separate UI object for defining the visualrepresentation and controller behaviour • the UI delegate

  12. 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. 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. CHANGE NOTIFICATION • Models implement methods for adding andremoving 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. 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. 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. IGNORING MODELS • Most components provide API to the modeldirectly • 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. 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. 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. 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. 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. 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

More Related