* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download No Slide Title
Survey
Document related concepts
Java (programming language) wikipedia , lookup
C Sharp syntax wikipedia , lookup
Java performance wikipedia , lookup
Stream processing wikipedia , lookup
Falcon (programming language) wikipedia , lookup
Functional programming wikipedia , lookup
Abstraction (computer science) wikipedia , lookup
Java ConcurrentMap wikipedia , lookup
Component Object Model wikipedia , lookup
Object-relational impedance mismatch wikipedia , lookup
Go (programming language) wikipedia , lookup
Object-oriented programming wikipedia , lookup
Application Interface Specification wikipedia , lookup
Structured programming wikipedia , lookup
Transcript
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