SlideShare a Scribd company logo
1 © 2001-2003 Marty Hall, Larry Brown http://www.corewebprogramming.com
core
programming
Basic Swing
GUI Controls in Java 2
Basic Swing2 www.corewebprogramming.com
Agenda
• New features
• Basic approach
• Summary of Swing components
– Starting points
• JApplet, JFrame
– Swing equivalent of AWT components
• JLabel, JButton, JPanel, JSlider
– New Swing components
• JColorChooser, JInternalFrame, JOptionPane,
JToolBar, JEditorPane
– Other simple components
• JCheckBox, JRadioButton, JTextField, JTextArea,
JFileChooser
Basic Swing3 www.corewebprogramming.com
New Features
• Many more built-in controls
– Image buttons, tabbed panes, sliders, toolbars, color
choosers, HTML text areas, lists, trees, and tables.
• Increased customization of components
– Border styles, text alignments, and basic drawing
features. Images can be added to almost any control.
• A pluggable “look and feel”
– Not limited to “native” look.
• Many miscellaneous small features
– Built-in double buffering, tool-tips, dockable toolbars,
keyboard accelerators, custom cursors, etc.
• Model-view-controller architecture
– Can change internal representation of trees, lists, tables.
Basic Swing4 www.corewebprogramming.com
Swing vs. AWT Programming
• Naming convention
– All Swing component names begin with a capital J and
follow the format JXxx. E.g., JFrame, JPanel, JApplet,
JDialog, JButton. Many are just AWT names with a J.
• Lightweight components
– Most Swing components are lightweight: formed by
drawing in the underlying window.
• Use of paintComponent for drawing
– Custom drawing code is in paintComponent, not paint.
Double buffering turned on by default.
• New Look and Feel as default
– With Swing, you have to explicitly set the native look.
• Don't mix Swing and AWT in same window
Basic Swing5 www.corewebprogramming.com
Windows Look and Feel
Basic Swing6 www.corewebprogramming.com
Motif Look and Feel
Basic Swing7 www.corewebprogramming.com
Java Look and Feel
Basic Swing8 www.corewebprogramming.com
Setting Native Look and Feel
• Most applications should use native look,
not default “Java” look
• Changing is tedious, so use static method
public class WindowUtilities {
public static void setNativeLookAndFeel() {
try {
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
} catch(Exception e) {
System.out.println("Error setting native LAF: "
+ e);
}
}
...
Basic Swing9 www.corewebprogramming.com
Whirlwind Tour of Basic
Components
• Starting points
– JApplet, JFrame
• Swing equivalent of AWT components
– JLabel, JButton, JPanel, JSlider
• New Swing components
– JColorChooser, JInternalFrame, JOptionPane, JToolBar,
JEditorPane
• Other simple components
– JCheckBox, JRadioButton, JTextField, JTextArea,
JFileChooser
Basic Swing10 www.corewebprogramming.com
Starting Point 1: JApplet
• Content pane
– A JApplet contains a content pane in which to add
components. Changing other properties like the layout
manager, background color, etc., also applies to the
content pane. Access the content pane through
getContentPane.
• Layout manager
– The default layout manager is BorderLayout (as with
Frame and JFrame), not FlowLayout (as with Applet).
BorderLayout is really layout manager of content pane.
• Look and feel
– The default look and feel is Java (Metal), so you have to
explicitly switch the look and feel if you want the native
look.
Basic Swing11 www.corewebprogramming.com
JApplet: Example Code
import java.awt.*;
import javax.swing.*;
public class JAppletExample extends JApplet {
public void init() {
WindowUtilities.setNativeLookAndFeel();
Container content = getContentPane();
content.setBackground(Color.white);
content.setLayout(new FlowLayout());
content.add(new JButton("Button 1"));
content.add(new JButton("Button 2"));
content.add(new JButton("Button 3"));
}
}
Basic Swing12 www.corewebprogramming.com
JApplet: Example Output
Basic Swing13 www.corewebprogramming.com
Starting Point 2: JFrame
• Content pane
– JFrame uses content pane in same way as does JApplet.
• Auto-close behavior
– JFrames close automatically when you click on the Close
button (unlike AWT Frames). However, closing the last
JFrame does not result in your program exiting the Java
application. So, your “main” JFrame still needs a
WindowListener to call System.exit. Or, alternatively, if
using JDK 1.3 or later, you can call setDefault-
CloseOperation(EXIT_ON_CLOSE). This permits the
JFrame to close; however, you won’t be able to complete
any house cleaning as you might in the WindowListener.
• Look and feel
– The default look and feel is Java (Metal)
Basic Swing14 www.corewebprogramming.com
JFrame: Example Code
import java.awt.*;
import javax.swing.*;
public class JFrameExample {
public static void main(String[] args) {
WindowUtilities.setNativeLookAndFeel();
JFrame f = new JFrame("This is a test");
f.setSize(400, 150);
Container content = f.getContentPane();
content.setBackground(Color.white);
content.setLayout(new FlowLayout());
content.add(new JButton("Button 1"));
content.add(new JButton("Button 2"));
content.add(new JButton("Button 3"));
f.addWindowListener(new ExitListener());
f.setVisible(true);
}
}
Basic Swing15 www.corewebprogramming.com
JFrame Helper: ExitListener
import java.awt.*;
import java.awt.event.*;
public class ExitListener extends WindowAdapter {
public void windowClosing(WindowEvent event) {
System.exit(0);
}
}
Basic Swing16 www.corewebprogramming.com
JFrame: Example Output
Basic Swing17 www.corewebprogramming.com
Swing Equivalents of AWT
Components
• JLabel
– New features: HTML content images, borders
• JButton
– New features: icons, alignment, mnemonics
• JPanel
– New feature: borders
• JSlider
– New features: tick marks and labels
Basic Swing18 www.corewebprogramming.com
JLabel
• Main new feature: HTML content
– If text is "<html>...</html>", it gets rendered as HTML
– HTML labels only work in JDK 1.2.2 or later, or in
Swing 1.1.1 or later.
– In JDK 1.2 the label string must begin with <html>, not
<HTML>. It is case-insensitive in JDK 1.3 and 1.4.
– JLabel fonts are ignored if HTML is used. If you use
HTML, all font control must be performed by HTML.
– You must use <P>, not <BR>, to force a line break.
– Other HTML support is spotty.
• Be sure to test each HTML construct you use.
Permitting the user to enter HTML text at runtime is
asking for trouble.
• Other new features: images, borders
Basic Swing19 www.corewebprogramming.com
JLabel: Example Code
String labelText =
"<html><FONT COLOR=WHITE>WHITE</FONT> and " +
"<FONT COLOR=GRAY>GRAY</FONT> Text</html>";
JLabel coloredLabel =
new JLabel(labelText, JLabel.CENTER);
...
labelText =
"<html><B>Bold</B> and <I>Italic</I> Text</html>";
JLabel boldLabel =
new JLabel(labelText, JLabel.CENTER);
labelText =
"<html>The Applied Physics Laboratory is..." +
"of the Johns Hopkins University." +
"<P>" + ... "...</html>";
Basic Swing20 www.corewebprogramming.com
JLabel: Example Output
Basic Swing21 www.corewebprogramming.com
JButton
• Main new feature: icons
1. Create an ImageIcon by passing the ImageIcon
constructor a String representing a GIF or JPG file
(animated GIFs are supported!).
• From an applet, call getImage(getCodeBase()…)
normally, then pass resultant Image to ImageIcon.
2. Pass the ImageIcon to the JButton constructor.
• Alternatively, call setIcon. In fact, there are 7
possible images (rollover images, images for when
button is depressed, etc.)
• Other features
– HTML content as with JLabel
– Alignment: location of image with respect to text
– Mnemonics: keyboard accelerators that let you use Alt-
someChar to trigger the button.
Basic Swing22 www.corewebprogramming.com
JButton: Example Code
import java.awt.*;
import javax.swing.*;
public class JButtons extends JFrame {
public static void main(String[] args) {
new JButtons();
}
public JButtons() {
super("Using JButton");
WindowUtilities.setNativeLookAndFeel();
addWindowListener(new ExitListener());
Container content = getContentPane();
content.setBackground(Color.white);
content.setLayout(new FlowLayout());
Basic Swing23 www.corewebprogramming.com
JButton: Example Code
(Continued)
JButton button1 = new JButton("Java");
content.add(button1);
ImageIcon cup = new ImageIcon("images/cup.gif");
JButton button2 = new JButton(cup);
content.add(button2);
JButton button3 = new JButton("Java", cup);
content.add(button3);
JButton button4 = new JButton("Java", cup);
button4.setHorizontalTextPosition
(SwingConstants.LEFT);
content.add(button4);
pack();
setVisible(true);
}
}
Basic Swing24 www.corewebprogramming.com
JButton: Example Output
Basic Swing25 www.corewebprogramming.com
JPanel
• Main new feature: borders
– Create a Border object by calling
BorderFactory.createXxxBorder.
– Supply the Border object to the JPanel by means of
setBorder.
JPanel p = new JPanel();
p.setBorder(BorderFactory.createTitledBorder("Java"));
• Other features:
– Layout manager settings
• Can pass the layout manager to the JPanel
constructor
– Setting preferred size
• There is no JCanvas. If you want JPanel to act like
Canvas, call setPreferredSize.
Basic Swing26 www.corewebprogramming.com
Standard Borders
• Static methods in BorderFactory
– createEmptyBorder(int top, int left, int bottom, int right)
• Creates an EmptyBorder object that simply adds
space (margins) around the component.
– createLineBorder(Color color)
– createLineBorder(Color color, int thickness)
• Creates a solid-color border
– createTitledBorder(String title)
– createTitledBorder(Border border, String title)
• The border is an etched line unless you explicitly
provide a border style in second constructor.
– createEtchedBorder()
– createEtchedBorder(Color highlight, Color shadow)
• Creates a etched line without the label
Basic Swing27 www.corewebprogramming.com
JPanel: Example Code
public class SixChoicePanel extends JPanel {
public SixChoicePanel(String title, String[] buttonLabels)
{
super(new GridLayout(3, 2));
setBackground(Color.lightGray);
setBorder(BorderFactory.createTitledBorder(title));
ButtonGroup group = new ButtonGroup();
JRadioButton option;
int halfLength = buttonLabels.length/2;
for(int i=0; i<halfLength; i++) {
option = new JRadioButton(buttonLabels[i]);
group.add(option);
add(option);
option = new JRadioButton(buttonLabels[i+halfLength]);
group.add(option);
add(option);
}
}
}
Basic Swing28 www.corewebprogramming.com
JPanel: Example Output
• Left window uses createLineBorder
• Right window has three SixChoicePanels
Basic Swing29 www.corewebprogramming.com
JSlider
• Basic use
– public JSlider()
– public JSlider(int orientation)
– public JSlider(int min, int max)
– public JSlider(int min, int max, int initialValue)
– public JSlider(int orientation, int min, int max,
int initialValue)
• New features: tick marks and labels
– setMajorTickSpacing
– setMinorTickSpacing
– setPaintTicks
– setPaintLabels (icons allowed as labels)
Basic Swing30 www.corewebprogramming.com
JSlider: Example Code
JSlider slider1 = new JSlider();
slider1.setBorder(...);
content.add(slider1, BorderLayout.NORTH);
JSlider slider2 = new JSlider();
slider2.setBorder(...);
slider2.setMajorTickSpacing(20);
slider2.setMinorTickSpacing(5);
slider2.setPaintTicks(true);
content.add(slider2, BorderLayout.CENTER);
JSlider slider3 = new JSlider();
slider3.setBorder(...);
slider3.setMajorTickSpacing(20);
slider3.setMinorTickSpacing(5);
slider3.setPaintTicks(true);
slider3.setPaintLabels(true);
content.add(slider3, BorderLayout.SOUTH);
Basic Swing31 www.corewebprogramming.com
JSlider: Example Output
(Windows, Motif, Java LAF)
Basic Swing32 www.corewebprogramming.com
JColorChooser
• Open
– Call JColorChooser.showDialog
• First argument: parent component
• Second argument: title string
• Third argument: initially-selected Color
• Return value
– Selected Color if "OK" chosen
– null if "Cancel" chosen
Basic Swing33 www.corewebprogramming.com
JColorChooser:
Example Code
• Button that lets you change color of window
public void actionPerformed(ActionEvent e) {
Color bgColor
= JColorChooser.showDialog
(this,
"Choose Background Color",
getBackground());
if (bgColor != null)
getContentPane().setBackground(bgColor);
}
Basic Swing34 www.corewebprogramming.com
JColorChooser:
Example Output
Basic Swing35 www.corewebprogramming.com
Internal Frames
• MDI: Multiple Document Interface
– Program has one large “desktop” pane that holds all other
windows. The other windows can be iconified
(minimized) and moved around within this desktop pane,
but not moved outside the pane. Furthermore, minimizing
the desktop pane hides all the contained windows as well.
– Examples: Microsoft PowerPoint, Corel Draw, Borland
JBuilder, and Allaire HomeSite
• Swing Support for MDI
– JDesktopPane
• Serves as a holder for the other windows.
– JInternalFrame
• Acts mostly like a JFrame, except that it is
constrained to stay inside the JDesktopPane.
Basic Swing36 www.corewebprogramming.com
Using JInternalFrame
• Main constructor
– public JInternalFrame(String title,
boolean resizable,
boolean closeable,
boolean maximizable,
boolean iconifiable)
• Other useful methods
– moveToFront
– moveToBack
– setSize (required!)
– setLocation (required!)
Basic Swing37 www.corewebprogramming.com
Internal Frames: Example Code
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JInternalFrames extends JFrame {
public static void main(String[] args) {
new JInternalFrames();
}
public JInternalFrames() {
super("Multiple Document Interface");
WindowUtilities.setNativeLookAndFeel();
addWindowListener(new ExitListener());
Container content = getContentPane();
content.setBackground(Color.white);
Basic Swing38 www.corewebprogramming.com
Internal Frames: Example Code
(Continued)
JDesktopPane desktop = new JDesktopPane();
desktop.setBackground(Color.white);
content.add(desktop, BorderLayout.CENTER);
setSize(450, 400);
for(int i=0; i<5; i++) {
JInternalFrame frame
= new JInternalFrame(("Internal Frame " + i),
true, true, true, true);
frame.setLocation(i*50+10, i*50+10);
frame.setSize(200, 150);
frame.setBackground(Color.white);
frame.setVisible(true);
desktop.add(frame);
frame.moveToFront();
}
setVisible(true);
} }
Basic Swing39 www.corewebprogramming.com
Internal Frames:
Example Output
Basic Swing40 www.corewebprogramming.com
JOptionPane
• Very rich class with many options for
different types of dialog boxes.
• Five main static methods
– JOptionPane.showMessageDialog
• Icon, message, OK button
– JOptionPane.showConfirmDialog
• Icon, message, and buttons:
OK, OK/Cancel, Yes/No, or Yes/No/Cancel
– JOptionPane.showInputDialog (2 versions)
• Icon, message, textfield or combo box, buttons
– JOptionPane.showOptionDialog
• Icon, message, array of buttons or other components
Basic Swing41 www.corewebprogramming.com
JOptionPane Message Dialogs
(Windows LAF)
Basic Swing42 www.corewebprogramming.com
JOptionPane Confirmation
Dialogs (Java LAF)
Basic Swing43 www.corewebprogramming.com
JToolBar
• Acts mostly like a JPanel for buttons
• Dockable: can be dragged and dropped
Basic Swing44 www.corewebprogramming.com
JEditorPane
• Acts somewhat like a text area
• Can display HTML and, if HyperLinkListener
attached, can follow links
Basic Swing45 www.corewebprogramming.com
Other Simple Swing
Components
• JCheckBox
– Note uppercase B
(vs. Checkbox in AWT)
• JRadioButton
– Use a ButtonGroup to
link radio buttons
• JTextField
– Just like AWT TextField except that it does not act as a
password field (use JPasswordField for that)
• JTextArea
– Place in JScrollPane if
you want scrolling
• JFileChooser
Basic Swing46 www.corewebprogramming.com
Summary
• Port simple AWT components by adding J
to front of class name
• Put custom drawing in paintComponent
– Call super.paintComponent at beginning unless you turn
off double buffering
• Java look and feel is default
– But you almost always want native look and feel
• Frames and applets use content pane
– Don't put anything directly in window
• Most components support borders & icons
• Many new components
47 © 2001-2003 Marty Hall, Larry Brown http://www.corewebprogramming.com
core
programming
Questions?

More Related Content

PDF
Basic swing
PPT
Swing basics
PPTX
Complete java swing
PDF
Program imageviewer
PPT
Java Swing JFC
PPT
Java swing
PPT
13 gui development
 
PDF
04b swing tutorial
Basic swing
Swing basics
Complete java swing
Program imageviewer
Java Swing JFC
Java swing
13 gui development
 
04b swing tutorial

What's hot (10)

PDF
Z blue introduction to gui (39023299)
PPT
Java: GUI
PPT
Java swing
PDF
Chat application in java using swing and socket programming.
PPT
Graphical User Interface (GUI) - 2
PPTX
Chapter 11.5
PPT
Advance Java Programming (CM5I) 2.Swing
PPT
Graphical User Interface (GUI) - 1
PDF
PDF
Z blue introduction to gui (39023299)
Java: GUI
Java swing
Chat application in java using swing and socket programming.
Graphical User Interface (GUI) - 2
Chapter 11.5
Advance Java Programming (CM5I) 2.Swing
Graphical User Interface (GUI) - 1
Ad

Viewers also liked (20)

PPT
Itp 120 Chapt 19 2009 Binary Input & Output
PPT
JavaYDL19
PPSX
Introduction to W3C I18N Best Practices
PPTX
Type हिन्दी in Java
PPTX
Unicode 101
PDF
java.io - fluxos (streams) e arquivos
PPTX
Java I/O and Object Serialization
PPT
01 Java Is Architecture Neutral
PDF
Core Java: Best practices and bytecodes quiz
PDF
Lecture 19
PPTX
Java Serialization Facts and Fallacies
PPT
Java Serialization
PDF
OWASP SD: Deserialize My Shorts: Or How I Learned To Start Worrying and Hate ...
PPT
File Input & Output
ODP
IO In Java
PDF
java.io - streams and files
PPTX
Serialization and performance in Java
PPS
Files & IO in Java
PPT
java swing programming
PDF
Itp 120 Chapt 19 2009 Binary Input & Output
JavaYDL19
Introduction to W3C I18N Best Practices
Type हिन्दी in Java
Unicode 101
java.io - fluxos (streams) e arquivos
Java I/O and Object Serialization
01 Java Is Architecture Neutral
Core Java: Best practices and bytecodes quiz
Lecture 19
Java Serialization Facts and Fallacies
Java Serialization
OWASP SD: Deserialize My Shorts: Or How I Learned To Start Worrying and Hate ...
File Input & Output
IO In Java
java.io - streams and files
Serialization and performance in Java
Files & IO in Java
java swing programming
Ad

Similar to 11basic Swing (20)

PPT
Swing_Introduction.ppt
PPTX
swing_compo.pptxsfdsfffdfdfdfdgwrwrwwtry
PPTX
PPTX
Unit 4_1.pptx JDBC AND GUI FOR CLIENT SERVER
PPTX
Java Swing Presentation made by aarav patel
PPTX
UNIT 2 SWIGS for java programing by .pptx
PPTX
it's about the swing programs in java language
PPTX
swings.pptx
PPT
Chapter 5 GUI for introduction of java and gui .ppt
PPT
java2 swing
PPT
08graphics
PPTX
Swing component point are mentioned in PPT which helpgul for creating Java GU...
PPTX
PDF
Java OOP Programming language (Part 7) - Swing
DOC
java swing notes in easy manner for UG students
PDF
Swing
PDF
Swing
PPT
2.swing.ppt advance java programming 3rd year
Swing_Introduction.ppt
swing_compo.pptxsfdsfffdfdfdfdgwrwrwwtry
Unit 4_1.pptx JDBC AND GUI FOR CLIENT SERVER
Java Swing Presentation made by aarav patel
UNIT 2 SWIGS for java programing by .pptx
it's about the swing programs in java language
swings.pptx
Chapter 5 GUI for introduction of java and gui .ppt
java2 swing
08graphics
Swing component point are mentioned in PPT which helpgul for creating Java GU...
Java OOP Programming language (Part 7) - Swing
java swing notes in easy manner for UG students
Swing
Swing
2.swing.ppt advance java programming 3rd year

More from Adil Jafri (20)

PDF
Csajsp Chapter5
PDF
Php How To
PDF
Php How To
PDF
Owl Clock
PDF
Phpcodebook
PDF
Phpcodebook
PDF
Programming Asp Net Bible
PDF
Tcpip Intro
PDF
Network Programming Clients
PDF
Jsp Tutorial
PPT
Ta Javaserverside Eran Toch
PDF
Csajsp Chapter10
PDF
Javascript
PDF
Flashmx Tutorials
PDF
Java For The Web With Servlets%2cjsp%2cand Ejb
PDF
Html Css
PDF
Digwc
PDF
Csajsp Chapter12
PDF
Html Frames
PDF
Flash Tutorial
Csajsp Chapter5
Php How To
Php How To
Owl Clock
Phpcodebook
Phpcodebook
Programming Asp Net Bible
Tcpip Intro
Network Programming Clients
Jsp Tutorial
Ta Javaserverside Eran Toch
Csajsp Chapter10
Javascript
Flashmx Tutorials
Java For The Web With Servlets%2cjsp%2cand Ejb
Html Css
Digwc
Csajsp Chapter12
Html Frames
Flash Tutorial

Recently uploaded (20)

PPT
Teaching material agriculture food technology
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
Tartificialntelligence_presentation.pptx
PDF
Encapsulation theory and applications.pdf
PDF
cuic standard and advanced reporting.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Spectroscopy.pptx food analysis technology
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Electronic commerce courselecture one. Pdf
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PPTX
Big Data Technologies - Introduction.pptx
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
MIND Revenue Release Quarter 2 2025 Press Release
Teaching material agriculture food technology
Diabetes mellitus diagnosis method based random forest with bat algorithm
Unlocking AI with Model Context Protocol (MCP)
Mobile App Security Testing_ A Comprehensive Guide.pdf
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Reach Out and Touch Someone: Haptics and Empathic Computing
Tartificialntelligence_presentation.pptx
Encapsulation theory and applications.pdf
cuic standard and advanced reporting.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Spectroscopy.pptx food analysis technology
Dropbox Q2 2025 Financial Results & Investor Presentation
Electronic commerce courselecture one. Pdf
NewMind AI Weekly Chronicles - August'25-Week II
Big Data Technologies - Introduction.pptx
20250228 LYD VKU AI Blended-Learning.pptx
Digital-Transformation-Roadmap-for-Companies.pptx
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
A comparative analysis of optical character recognition models for extracting...
MIND Revenue Release Quarter 2 2025 Press Release

11basic Swing

  • 1. 1 © 2001-2003 Marty Hall, Larry Brown http://www.corewebprogramming.com core programming Basic Swing GUI Controls in Java 2
  • 2. Basic Swing2 www.corewebprogramming.com Agenda • New features • Basic approach • Summary of Swing components – Starting points • JApplet, JFrame – Swing equivalent of AWT components • JLabel, JButton, JPanel, JSlider – New Swing components • JColorChooser, JInternalFrame, JOptionPane, JToolBar, JEditorPane – Other simple components • JCheckBox, JRadioButton, JTextField, JTextArea, JFileChooser
  • 3. Basic Swing3 www.corewebprogramming.com New Features • Many more built-in controls – Image buttons, tabbed panes, sliders, toolbars, color choosers, HTML text areas, lists, trees, and tables. • Increased customization of components – Border styles, text alignments, and basic drawing features. Images can be added to almost any control. • A pluggable “look and feel” – Not limited to “native” look. • Many miscellaneous small features – Built-in double buffering, tool-tips, dockable toolbars, keyboard accelerators, custom cursors, etc. • Model-view-controller architecture – Can change internal representation of trees, lists, tables.
  • 4. Basic Swing4 www.corewebprogramming.com Swing vs. AWT Programming • Naming convention – All Swing component names begin with a capital J and follow the format JXxx. E.g., JFrame, JPanel, JApplet, JDialog, JButton. Many are just AWT names with a J. • Lightweight components – Most Swing components are lightweight: formed by drawing in the underlying window. • Use of paintComponent for drawing – Custom drawing code is in paintComponent, not paint. Double buffering turned on by default. • New Look and Feel as default – With Swing, you have to explicitly set the native look. • Don't mix Swing and AWT in same window
  • 8. Basic Swing8 www.corewebprogramming.com Setting Native Look and Feel • Most applications should use native look, not default “Java” look • Changing is tedious, so use static method public class WindowUtilities { public static void setNativeLookAndFeel() { try { UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName()); } catch(Exception e) { System.out.println("Error setting native LAF: " + e); } } ...
  • 9. Basic Swing9 www.corewebprogramming.com Whirlwind Tour of Basic Components • Starting points – JApplet, JFrame • Swing equivalent of AWT components – JLabel, JButton, JPanel, JSlider • New Swing components – JColorChooser, JInternalFrame, JOptionPane, JToolBar, JEditorPane • Other simple components – JCheckBox, JRadioButton, JTextField, JTextArea, JFileChooser
  • 10. Basic Swing10 www.corewebprogramming.com Starting Point 1: JApplet • Content pane – A JApplet contains a content pane in which to add components. Changing other properties like the layout manager, background color, etc., also applies to the content pane. Access the content pane through getContentPane. • Layout manager – The default layout manager is BorderLayout (as with Frame and JFrame), not FlowLayout (as with Applet). BorderLayout is really layout manager of content pane. • Look and feel – The default look and feel is Java (Metal), so you have to explicitly switch the look and feel if you want the native look.
  • 11. Basic Swing11 www.corewebprogramming.com JApplet: Example Code import java.awt.*; import javax.swing.*; public class JAppletExample extends JApplet { public void init() { WindowUtilities.setNativeLookAndFeel(); Container content = getContentPane(); content.setBackground(Color.white); content.setLayout(new FlowLayout()); content.add(new JButton("Button 1")); content.add(new JButton("Button 2")); content.add(new JButton("Button 3")); } }
  • 13. Basic Swing13 www.corewebprogramming.com Starting Point 2: JFrame • Content pane – JFrame uses content pane in same way as does JApplet. • Auto-close behavior – JFrames close automatically when you click on the Close button (unlike AWT Frames). However, closing the last JFrame does not result in your program exiting the Java application. So, your “main” JFrame still needs a WindowListener to call System.exit. Or, alternatively, if using JDK 1.3 or later, you can call setDefault- CloseOperation(EXIT_ON_CLOSE). This permits the JFrame to close; however, you won’t be able to complete any house cleaning as you might in the WindowListener. • Look and feel – The default look and feel is Java (Metal)
  • 14. Basic Swing14 www.corewebprogramming.com JFrame: Example Code import java.awt.*; import javax.swing.*; public class JFrameExample { public static void main(String[] args) { WindowUtilities.setNativeLookAndFeel(); JFrame f = new JFrame("This is a test"); f.setSize(400, 150); Container content = f.getContentPane(); content.setBackground(Color.white); content.setLayout(new FlowLayout()); content.add(new JButton("Button 1")); content.add(new JButton("Button 2")); content.add(new JButton("Button 3")); f.addWindowListener(new ExitListener()); f.setVisible(true); } }
  • 15. Basic Swing15 www.corewebprogramming.com JFrame Helper: ExitListener import java.awt.*; import java.awt.event.*; public class ExitListener extends WindowAdapter { public void windowClosing(WindowEvent event) { System.exit(0); } }
  • 17. Basic Swing17 www.corewebprogramming.com Swing Equivalents of AWT Components • JLabel – New features: HTML content images, borders • JButton – New features: icons, alignment, mnemonics • JPanel – New feature: borders • JSlider – New features: tick marks and labels
  • 18. Basic Swing18 www.corewebprogramming.com JLabel • Main new feature: HTML content – If text is "<html>...</html>", it gets rendered as HTML – HTML labels only work in JDK 1.2.2 or later, or in Swing 1.1.1 or later. – In JDK 1.2 the label string must begin with <html>, not <HTML>. It is case-insensitive in JDK 1.3 and 1.4. – JLabel fonts are ignored if HTML is used. If you use HTML, all font control must be performed by HTML. – You must use <P>, not <BR>, to force a line break. – Other HTML support is spotty. • Be sure to test each HTML construct you use. Permitting the user to enter HTML text at runtime is asking for trouble. • Other new features: images, borders
  • 19. Basic Swing19 www.corewebprogramming.com JLabel: Example Code String labelText = "<html><FONT COLOR=WHITE>WHITE</FONT> and " + "<FONT COLOR=GRAY>GRAY</FONT> Text</html>"; JLabel coloredLabel = new JLabel(labelText, JLabel.CENTER); ... labelText = "<html><B>Bold</B> and <I>Italic</I> Text</html>"; JLabel boldLabel = new JLabel(labelText, JLabel.CENTER); labelText = "<html>The Applied Physics Laboratory is..." + "of the Johns Hopkins University." + "<P>" + ... "...</html>";
  • 21. Basic Swing21 www.corewebprogramming.com JButton • Main new feature: icons 1. Create an ImageIcon by passing the ImageIcon constructor a String representing a GIF or JPG file (animated GIFs are supported!). • From an applet, call getImage(getCodeBase()…) normally, then pass resultant Image to ImageIcon. 2. Pass the ImageIcon to the JButton constructor. • Alternatively, call setIcon. In fact, there are 7 possible images (rollover images, images for when button is depressed, etc.) • Other features – HTML content as with JLabel – Alignment: location of image with respect to text – Mnemonics: keyboard accelerators that let you use Alt- someChar to trigger the button.
  • 22. Basic Swing22 www.corewebprogramming.com JButton: Example Code import java.awt.*; import javax.swing.*; public class JButtons extends JFrame { public static void main(String[] args) { new JButtons(); } public JButtons() { super("Using JButton"); WindowUtilities.setNativeLookAndFeel(); addWindowListener(new ExitListener()); Container content = getContentPane(); content.setBackground(Color.white); content.setLayout(new FlowLayout());
  • 23. Basic Swing23 www.corewebprogramming.com JButton: Example Code (Continued) JButton button1 = new JButton("Java"); content.add(button1); ImageIcon cup = new ImageIcon("images/cup.gif"); JButton button2 = new JButton(cup); content.add(button2); JButton button3 = new JButton("Java", cup); content.add(button3); JButton button4 = new JButton("Java", cup); button4.setHorizontalTextPosition (SwingConstants.LEFT); content.add(button4); pack(); setVisible(true); } }
  • 25. Basic Swing25 www.corewebprogramming.com JPanel • Main new feature: borders – Create a Border object by calling BorderFactory.createXxxBorder. – Supply the Border object to the JPanel by means of setBorder. JPanel p = new JPanel(); p.setBorder(BorderFactory.createTitledBorder("Java")); • Other features: – Layout manager settings • Can pass the layout manager to the JPanel constructor – Setting preferred size • There is no JCanvas. If you want JPanel to act like Canvas, call setPreferredSize.
  • 26. Basic Swing26 www.corewebprogramming.com Standard Borders • Static methods in BorderFactory – createEmptyBorder(int top, int left, int bottom, int right) • Creates an EmptyBorder object that simply adds space (margins) around the component. – createLineBorder(Color color) – createLineBorder(Color color, int thickness) • Creates a solid-color border – createTitledBorder(String title) – createTitledBorder(Border border, String title) • The border is an etched line unless you explicitly provide a border style in second constructor. – createEtchedBorder() – createEtchedBorder(Color highlight, Color shadow) • Creates a etched line without the label
  • 27. Basic Swing27 www.corewebprogramming.com JPanel: Example Code public class SixChoicePanel extends JPanel { public SixChoicePanel(String title, String[] buttonLabels) { super(new GridLayout(3, 2)); setBackground(Color.lightGray); setBorder(BorderFactory.createTitledBorder(title)); ButtonGroup group = new ButtonGroup(); JRadioButton option; int halfLength = buttonLabels.length/2; for(int i=0; i<halfLength; i++) { option = new JRadioButton(buttonLabels[i]); group.add(option); add(option); option = new JRadioButton(buttonLabels[i+halfLength]); group.add(option); add(option); } } }
  • 28. Basic Swing28 www.corewebprogramming.com JPanel: Example Output • Left window uses createLineBorder • Right window has three SixChoicePanels
  • 29. Basic Swing29 www.corewebprogramming.com JSlider • Basic use – public JSlider() – public JSlider(int orientation) – public JSlider(int min, int max) – public JSlider(int min, int max, int initialValue) – public JSlider(int orientation, int min, int max, int initialValue) • New features: tick marks and labels – setMajorTickSpacing – setMinorTickSpacing – setPaintTicks – setPaintLabels (icons allowed as labels)
  • 30. Basic Swing30 www.corewebprogramming.com JSlider: Example Code JSlider slider1 = new JSlider(); slider1.setBorder(...); content.add(slider1, BorderLayout.NORTH); JSlider slider2 = new JSlider(); slider2.setBorder(...); slider2.setMajorTickSpacing(20); slider2.setMinorTickSpacing(5); slider2.setPaintTicks(true); content.add(slider2, BorderLayout.CENTER); JSlider slider3 = new JSlider(); slider3.setBorder(...); slider3.setMajorTickSpacing(20); slider3.setMinorTickSpacing(5); slider3.setPaintTicks(true); slider3.setPaintLabels(true); content.add(slider3, BorderLayout.SOUTH);
  • 31. Basic Swing31 www.corewebprogramming.com JSlider: Example Output (Windows, Motif, Java LAF)
  • 32. Basic Swing32 www.corewebprogramming.com JColorChooser • Open – Call JColorChooser.showDialog • First argument: parent component • Second argument: title string • Third argument: initially-selected Color • Return value – Selected Color if "OK" chosen – null if "Cancel" chosen
  • 33. Basic Swing33 www.corewebprogramming.com JColorChooser: Example Code • Button that lets you change color of window public void actionPerformed(ActionEvent e) { Color bgColor = JColorChooser.showDialog (this, "Choose Background Color", getBackground()); if (bgColor != null) getContentPane().setBackground(bgColor); }
  • 35. Basic Swing35 www.corewebprogramming.com Internal Frames • MDI: Multiple Document Interface – Program has one large “desktop” pane that holds all other windows. The other windows can be iconified (minimized) and moved around within this desktop pane, but not moved outside the pane. Furthermore, minimizing the desktop pane hides all the contained windows as well. – Examples: Microsoft PowerPoint, Corel Draw, Borland JBuilder, and Allaire HomeSite • Swing Support for MDI – JDesktopPane • Serves as a holder for the other windows. – JInternalFrame • Acts mostly like a JFrame, except that it is constrained to stay inside the JDesktopPane.
  • 36. Basic Swing36 www.corewebprogramming.com Using JInternalFrame • Main constructor – public JInternalFrame(String title, boolean resizable, boolean closeable, boolean maximizable, boolean iconifiable) • Other useful methods – moveToFront – moveToBack – setSize (required!) – setLocation (required!)
  • 37. Basic Swing37 www.corewebprogramming.com Internal Frames: Example Code import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JInternalFrames extends JFrame { public static void main(String[] args) { new JInternalFrames(); } public JInternalFrames() { super("Multiple Document Interface"); WindowUtilities.setNativeLookAndFeel(); addWindowListener(new ExitListener()); Container content = getContentPane(); content.setBackground(Color.white);
  • 38. Basic Swing38 www.corewebprogramming.com Internal Frames: Example Code (Continued) JDesktopPane desktop = new JDesktopPane(); desktop.setBackground(Color.white); content.add(desktop, BorderLayout.CENTER); setSize(450, 400); for(int i=0; i<5; i++) { JInternalFrame frame = new JInternalFrame(("Internal Frame " + i), true, true, true, true); frame.setLocation(i*50+10, i*50+10); frame.setSize(200, 150); frame.setBackground(Color.white); frame.setVisible(true); desktop.add(frame); frame.moveToFront(); } setVisible(true); } }
  • 40. Basic Swing40 www.corewebprogramming.com JOptionPane • Very rich class with many options for different types of dialog boxes. • Five main static methods – JOptionPane.showMessageDialog • Icon, message, OK button – JOptionPane.showConfirmDialog • Icon, message, and buttons: OK, OK/Cancel, Yes/No, or Yes/No/Cancel – JOptionPane.showInputDialog (2 versions) • Icon, message, textfield or combo box, buttons – JOptionPane.showOptionDialog • Icon, message, array of buttons or other components
  • 42. Basic Swing42 www.corewebprogramming.com JOptionPane Confirmation Dialogs (Java LAF)
  • 43. Basic Swing43 www.corewebprogramming.com JToolBar • Acts mostly like a JPanel for buttons • Dockable: can be dragged and dropped
  • 44. Basic Swing44 www.corewebprogramming.com JEditorPane • Acts somewhat like a text area • Can display HTML and, if HyperLinkListener attached, can follow links
  • 45. Basic Swing45 www.corewebprogramming.com Other Simple Swing Components • JCheckBox – Note uppercase B (vs. Checkbox in AWT) • JRadioButton – Use a ButtonGroup to link radio buttons • JTextField – Just like AWT TextField except that it does not act as a password field (use JPasswordField for that) • JTextArea – Place in JScrollPane if you want scrolling • JFileChooser
  • 46. Basic Swing46 www.corewebprogramming.com Summary • Port simple AWT components by adding J to front of class name • Put custom drawing in paintComponent – Call super.paintComponent at beginning unless you turn off double buffering • Java look and feel is default – But you almost always want native look and feel • Frames and applets use content pane – Don't put anything directly in window • Most components support borders & icons • Many new components
  • 47. 47 © 2001-2003 Marty Hall, Larry Brown http://www.corewebprogramming.com core programming Questions?