Java Swing
Content
Intro
MVC Pattern
Basic Components
Layoutmanager
Example: Basic Swing App
Intro
- AWT disadvantages
- OS provides window and dialog elements
- Difficult to achieve unified look and feel
- Porting problems due to OS differences
- Required lots of effort to unify behaviour
- Small set of elements provided by AWT
- Swing characteristics
- Components require minimum amount of platform specific GUI resources
- Besides top-level window, dialogs and primitive operations, all GUI elements implemented in java
- E.g. JButton not provided by Windows UI-Manager, entirely implemented in Java
Swing Characteristics
- Swing codebase is cleaner, since only minimal platform specific code
- Unified look and feel
- Independent of common platform components
- May introduce new components
- Lightweight component
- Paint method not defered to OS specific resources
- Implemented via primitive graphic operations
- AWT components are heavyweight
- Pluggable look and feel
- May change during runtime
Model View Controller
- Divide codebase into three areas
- Modell: holds the data
- View: is concerned about the graphical presentation
- Controller: connects modell with view
- Model-Delegate Pattern
- Similar to MVC
- View and Controller packed in a UI-Delegate
- Easier to implement since view and controller no separate
Basic Swing App
Basic Swing App
public class BasicFrame extends JFrame implements ActionListener {
// ...
@Override
public void actionPerformed(ActionEvent event) {
// ...
}
}
- Main class extends JFrame
- Implements ActionListener
- Overrides actionPerformed
- Adds known WindowClosingAdapter
JFrame
// JFrame class in JSE
public class JFrame extends Frame implements ... {
// ...
}
// Content pane as container
JPanel namePanel = new JPanel();
namePanel.setBorder(BorderFactory.createEtchedBorder());
getContentPane().add(namePanel, BorderLayout.NORTH);
- Extends an AWT Frame
- Creates a Swing window (JDialog, JWindow, JApplet)
- Container is a content pane
JPanel
// JPanel class in JSE
public class JPanel extends JComponent implements ... {
// ...
}
// Usage
JPanel buttonPanel = new JPanel();
buttonPanel.setBorder(BorderFactory.createEtchedBorder());
getContentPane().add(buttonPanel, BorderLayout.SOUTH);
- Extends JComponent
- Allows the usage of another layout manager
- Allows borders
- General purpose container
JLabel & JTextField
// JLabel class in JSE
public class JLabel extends JComponent implements ... {
// ...
}
// JTextField class in JSE
public class JTextField extends JTextComponent implements ... {
// ...
}
// JLabel usage
JLabel nameLabel = new JLabel("Name: ", new ImageIcon("triblue.gif"), SwingConstants.LEFT);
// JTextField usage
JTextField tf = new JTextField(30);
- JLabel
- Used to display immutable
- May display an icon
- JTextField
- Simple text input
- Use JPasswordField for password inputs
Tooltip and Borders
// Tooltip on JButton
JButton btn1 = new JButton("Metal");
btn1.setToolTipText("Activate Metal-Look-and-Feel");
// Borders
JPanel buttonPanel = new JPanel();
buttonPanel.setBorder(BorderFactory.createEtchedBorder());
- Tooltip via setToolTipText(...)
- Borders
- Feature of JComponent
- Pass a Border instance
- Created with BorderFactory
JList
String[] MONTHS = {
"January", "February", "March", "April",
"May", "June", "July", "August",
"September", "October", "November", "December",
};
JList list = new JList(MONTHS);
- List of values, one or multiple entries selectable
- Pass list of values or
- Pass instance of ListModel to display complex and dynamic data structures
JScrollPane
JList list = new JList(MONTHS);
list.setToolTipText("Choose your birthdate");
getContentPane().add(new JScrollPane(list), BorderLayout.CENTER);
- Allows scrolling on bigger components
- Handles scrolling logic
Look and Feel
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
SwingUtilities.updateComponentTreeUI(this);
- Use UIManager to set look and feel
- USe SwingUtilities to update component tree to refresh style
Layout Manager
- In some GUI systems absolute coords are used to position components
- AWT designers opted to use a layout manager
- Layout manager handles position of components
- Specify layout manager via setLayout method
- Components are passed to the add method, positions determined by layout manager
Layout Manager Overview
- FlowLayout
- Position elements horizontally
- Jump to next line if no horizontal space left
- GridLayout
- Specify a rectangular grid
- Number of colmuns and rows defined when initializing
- BorderLayout
- Position on borders of container or middle
- CardLayout
- Holds multiple containers, allows to display one component at a time
- GridBagLayout
- Extends functionalities of GridLayout
References
Handbuch der Java-Programmierung
(5. Auflage)
Thank you for your attention!
Java Swing
By dinony
Java Swing
Java GUI programming
- 338