Extreme G22.3033-007

Session 3 - Sub-Topic 1

Dr. Jean-Claude Franchitti

New York University Computer Science Department Courant Institute of Mathematical Sciences

Java Core Technologies

• JFC Swing

What is Swing?

• A GUI toolkit that simplifies and streamlines the development of windowing components (e.g., menus, toolbars, etc.) • Pluggable look-and-feel design (PL&F) – Platform specific with platform independent software – Swing components never rely on peer code • Lightweight components

1 Swing and AWT

• Swing extends - but does not replace - the Abstract Windowing Toolkit (AWT) • AWT is a set of OO GUI classes • Swing extends the Lightweight UI Framework that became part of the Java AWT with the introduction of JDK 1.1

Swing is 100% Pure Java and Swing Beans • Components are 100% pure Java versions of AWT components (e.g., Button, Scrollbar, List, etc.) • Swing also include new higher-level components written in pure Java (e.g., tree- view, list-box, tabbed-pane components) • Swing is compatible with the JavaBeans specification

Swing and the JFC Library

• The JCF Library includes the Swing component set • JFC also contains three major : – Java 2D • advanced 2D graphics and imaging – Drag and Drop • data transfer across Java and native applications, and within a single Java application – Accessibility API • e.g., screen magnifiers, and audible text readers

2 Swing Architecture

Differences between AWT and Swing • Swing does not use any platform-specific implementations (such as AWT’s “peers”) • Swing creates its components using pluggable look-and-feel (PL&F or plaf) • Swing automatically plugs in the L&F module that matches its platform • Other L&F modules can also run in a given GUI

Differences between AWT and Swing (continued) • L&F can be changed dynamically at runtime • The 3 other JFC APIs can be used in Swing programs in a 1.2/1.3 environment (real integration is planned for a future release)

3 The Three Parts of Swing

• New set of components inheriting from JComponent – Jcomponent is a descendent form AWT’s Container class – Jcomponent is the root class of almost all Swing Component classes – Hierarchy allows Swing components to contain other components (component nesting)

The Three Parts of Swing (continued) • Group of Swing-related support classes – Vital services to the Swing API – Not used to create visible Swing components • New set of Swing-related interfaces implemented by Swing component classes and support classes

Swing & IFC

• Best features of AWT and Netscape’s IFC (Internet Foundation Class) library are being integrated • Some similarity in the default look and feel of Swing and IFC widgets • Similarities are disappearing since L&Fs give Swing components different looks and feels in different implementations

4 Swing Component Gallery JApplet - Border Interface - Jbutton -JCheckBox - JCheckBoxMenuItem

JColorChooser - JComboBox - ImageIcon - Jdialog - JFileChooser

JInternalFrame - Jlabel - JList - JMenu - JMenuBar - JOptionPane

Swing Component Gallery (cont.) JPopupMenu -JProgressBar - JRadioButton - JRadioMenuItem - JScrollBar

JScrollPane - Jslider - JSplitPane - JTabbedPane - JTable

JTextArea - JTextField - JToggleButton - JToolBar - JToolTip -JTree

Swing’s Inheritance Hierarchy

5 Swing Component Hierarchy

• More than 250 classes • More than 75 interfaces for creating lightweight, 100% pure Java GUI components • More than twice as many components as AWT

UI classes and non-UI classes

• All UI-Swing component classes start with “J” and descend from JComponent • UI classes create visible components (e.g., buttons, menus, etc.) • Examples of non-UI classes – events classes, and model classes

Differences Between AWT & Swing

6 Differences Between AWT & Swing

• In AWT: CheckBox served as a check-box class and a radio-button class • In Swing all buttons have three states (pressed, enabled, and selected) • It is easier to synchronize and coordinate menu events and button events in Swing (a single mouse click can activate or desactivate both a menu item and its toolbar button)

JComponent Class

Roots in MVC

7