The Open University of Tanzania
(OUT)
Java
Java
Swing
Swing
2
Introduction
Introduction
• Swing – A set of GUI classes
– Part of the Java's standard library
– Much better than the previous library: AWT
• Abstract Window Toolkit
• Highlights
– A rich set of widgets
• Widget: Any GUI element (also called: components)
– Contents and shape are separated (MVC support)
– Fine-grained control over the behavior and look and feel
– Platform independent
• Isolates the programmer from the operating system's GUI
3
Swing Components
Swing Components
• Containers
– Contain and manage other components.
– Top Level/Internal
– Examples: JFrame (Top Level), JScrollPane, JPanel.
• Basic controls
– Atomic components
– Used for showing ouput and/or getting some input
– Inherits JComponent
– Examples: JButton, JLabel, JTextArea, JTable,
Jlist
• Usually every Swing class extends the corresponding AWT class
– For backward-compatibility reasons
4
My First Swing Program
My First Swing Program
import javax.swing.*;
import java.awt.BorderLayout;
public class First {
public static void main(String[] args) {
JFrame frame = new JFrame("My First Frame");
// operation to do when the window is closed.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(new JLabel("I Love Swing"),
BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
}
5
Top Level Containers: JDialog
Top Level Containers: JDialog
• javax.swing.JDialog:
– More simple and limited than frames
– Typically used for showing a short message on the screen
– Also has a border and a title bar
– May have an owner
• If the owner is invisible the dialog will also be invisible
– Use the static method of JoptionPane to show standard dialog boxes:
JOptionPane.showMessageDialog(null, "4+2=6");
6
Top Level Containers: JFileChooser
Top Level Containers: JFileChooser
• javax.swing.JFileChooser:
– Allows the the user to choose a file
– Supports “open” and “save”: showOpenDialog(),showSaveDialog()
JFileChooser fc = new JFileChooser();
int returnVal = fc.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION)
System.out.println("File: " + fc.getSelectedFile());
7
Top Level Containers: JFrame
Top Level Containers: JFrame
• javax.swing.JFrame:
– Top-level window with a title and a border.
– Usually used as a program's main window
8
More on JFrame
More on JFrame
• Made of several layers
• Widgets are added to the Content Pane layer.
– Use getContentPane() to obtain it
• Other layers are used for customizing the window's
appearence
9
Internal Containers
Internal Containers
• Not Top level containers
• Can contain other non-top level components
• Examples:
– JScrollPane: Provides a scrollable view of its
components
– JSplitPane: Separates two components
– JTabbedPane: User chooses which
component to see
10
Containers - Layout
Containers - Layout
• Each container has a layout manager
– Determines the size, location of contained widgets.
• Setting the current layout of a container:
void setLayout(LayoutManager lm)
• LayoutManager implementing classes:
– BorderLayout
– BoxLayout
– FlowLayout
– GridLayout
11
Containers - Layout
Containers - Layout
12
Swing Components
Swing Components
13
Swing Components
Swing Components
14
First Swing Program Revisited
First Swing Program Revisited
import javax.swing.*;
import java.awt.BorderLayout;
public class First {
public static void main(String[] args) {
JFrame frame = new JFrame("My First Frame");
// operation to do when the window is closed.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(new JLabel("I Love Swing"),
BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
}
Create a frame
Create a text
label
Add the label to
the content pane
Choose the border
layout
Specify CENTER as
the layout position
15
Input
Input
• So we now know how to present widgets on the screen
• A program also needs to react to the user's actions
• Examples:
– When the user presses a button we want to save a file
– When the user closes the program we want to ask “are you sure?”
– ...
• Swing mechanism: Events and Listeners
16
Events, Listeners
Events, Listeners
• Swing defines all sorts of Listener interfaces
– E.g.: ActionListener, MouseMotionListener,
WindowListener, ...
public interface ActionListener extends EventListener {
public void actionPerformed(ActionEvent e);
}
public interface MouseMotionListener extends EventListener {
public void mouseDragged(MouseEvent e);
public void mouseMoved(MouseEvent e);
}
• There are default (empty) implementations for many of the listeners
– E.g.: MouseMotionAdapter, WindowAdapter
17
Events, Listeners (cont.)
Events, Listeners (cont.)
• A listener is an object that implements a listener interface
• If we need to react to an event (on a certain widget) we register a listener
object with that widget
• E.g.: addActionListener() registers an action listener with its receiver:
JButton button = new JButton();
ActionListener listener = ...;
button.addActionListener(listener);
• When an event occurs, all registered listeners are notified
– The appropriate listener method (e.g: actionPerformed()) is invoked
– An object describing the event is passed as a parameter
18
Event Handling Demo: GUI
Event Handling Demo: GUI
19
Event Handling Demo: Code
Event Handling Demo: Code
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Events implements ActionListener {
public Events() {
JFrame frame = new JFrame("Events");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new FlowLayout());
JButton b = new JButton("Click me!");
b.addActionListener(this);
frame.getContentPane().add(b);
frame.pack();
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "Thank you");
}
public static void main(String[] args) { new Events(); }
}
20
Inner Classes
Inner Classes
• Nested within another classes
• Instance specific:
– Has access to methods & fields of the object that created it
– => An inner class has TWO this variables
• Can be static
– Can access only static members and methods only
– A static method cannot create a non-static inner class
21
Local Classes
Local Classes
• Same as inner classes but defined inside a method
• Has access to local variables of the enclosing method
– Only if the variable is defined as final
• Can be anonymous
– Doesn’t have a name.
22
Event Handling Demo: Local Class
Event Handling Demo: Local Class
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Events {
public Events() {
JFrame frame = new JFrame("Events");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new FlowLayout());
JButton b = new JButton("Click me!");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "Thank you");
}
});
frame.getContentPane().add(b);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) { new Events(); }
}
23
Accessing Fields of Enclosing Object
Accessing Fields of Enclosing Object
public class A {
int x = 0;
public void f() {
B b = new B();
b.g();
System.out.println(x); // Output: 5
}
public class B {
public void g() { x = 5; }
}
public static void main(String[] args) {
new A().f();
}
}
24
Using the Second this Variable
Using the Second this Variable
public class A {
public void f() {
B b = new B();
System.out.println(b.g()); // Output: 1024
}
public int g() { return 512; }
public class B {
public int g() { return A.this.g() * 2; }
}
public static void main(String[] args) {
new A().f();
}
}
25
Appendix:
Appendix:
Contact Book Program
Contact Book Program
26
Swing's JTable
Swing's JTable
• Each JTable has a TableModel object that holds the data
shown by the table.
• DefaultTableModel is a default implementation of
TableModel
– By default it makes all the cells editable
• We can customize its behavior by subclassing
– Or we can implement TableModel from scratch
• TableModelListener - a listener interface
– Notified of changes in the model
• Use TableModel.addTableModelListener() to register a
listener object
27
Contacts Book example overview
Contacts Book example overview
• Each contact has a name and a list of attributes
– Each attribute has a name and a value.
• Operations:
– Add contact
• Contact name is immutable
– Add attributes
• Attribute is identified by it’s name, the attribute name is immutable, it’s value can
be changed
• Classes:
– Contact: represents a contact and maintains list of attributes
– Contact.Attribute: Inner class that represents contact attribute.
– ContactTableModel: model class for the table data
• Doesn’t allow to modify attribute names
– ContactBook: represents the contact book widget.
28
Contacts Book example overview
Contacts Book example overview

Java Swing in java object oriented progaming.ppt

  • 1.
    The Open Universityof Tanzania (OUT) Java Java Swing Swing
  • 2.
    2 Introduction Introduction • Swing –A set of GUI classes – Part of the Java's standard library – Much better than the previous library: AWT • Abstract Window Toolkit • Highlights – A rich set of widgets • Widget: Any GUI element (also called: components) – Contents and shape are separated (MVC support) – Fine-grained control over the behavior and look and feel – Platform independent • Isolates the programmer from the operating system's GUI
  • 3.
    3 Swing Components Swing Components •Containers – Contain and manage other components. – Top Level/Internal – Examples: JFrame (Top Level), JScrollPane, JPanel. • Basic controls – Atomic components – Used for showing ouput and/or getting some input – Inherits JComponent – Examples: JButton, JLabel, JTextArea, JTable, Jlist • Usually every Swing class extends the corresponding AWT class – For backward-compatibility reasons
  • 4.
    4 My First SwingProgram My First Swing Program import javax.swing.*; import java.awt.BorderLayout; public class First { public static void main(String[] args) { JFrame frame = new JFrame("My First Frame"); // operation to do when the window is closed. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(new BorderLayout()); frame.getContentPane().add(new JLabel("I Love Swing"), BorderLayout.CENTER); frame.pack(); frame.setVisible(true); } }
  • 5.
    5 Top Level Containers:JDialog Top Level Containers: JDialog • javax.swing.JDialog: – More simple and limited than frames – Typically used for showing a short message on the screen – Also has a border and a title bar – May have an owner • If the owner is invisible the dialog will also be invisible – Use the static method of JoptionPane to show standard dialog boxes: JOptionPane.showMessageDialog(null, "4+2=6");
  • 6.
    6 Top Level Containers:JFileChooser Top Level Containers: JFileChooser • javax.swing.JFileChooser: – Allows the the user to choose a file – Supports “open” and “save”: showOpenDialog(),showSaveDialog() JFileChooser fc = new JFileChooser(); int returnVal = fc.showOpenDialog(null); if(returnVal == JFileChooser.APPROVE_OPTION) System.out.println("File: " + fc.getSelectedFile());
  • 7.
    7 Top Level Containers:JFrame Top Level Containers: JFrame • javax.swing.JFrame: – Top-level window with a title and a border. – Usually used as a program's main window
  • 8.
    8 More on JFrame Moreon JFrame • Made of several layers • Widgets are added to the Content Pane layer. – Use getContentPane() to obtain it • Other layers are used for customizing the window's appearence
  • 9.
    9 Internal Containers Internal Containers •Not Top level containers • Can contain other non-top level components • Examples: – JScrollPane: Provides a scrollable view of its components – JSplitPane: Separates two components – JTabbedPane: User chooses which component to see
  • 10.
    10 Containers - Layout Containers- Layout • Each container has a layout manager – Determines the size, location of contained widgets. • Setting the current layout of a container: void setLayout(LayoutManager lm) • LayoutManager implementing classes: – BorderLayout – BoxLayout – FlowLayout – GridLayout
  • 11.
  • 12.
  • 13.
  • 14.
    14 First Swing ProgramRevisited First Swing Program Revisited import javax.swing.*; import java.awt.BorderLayout; public class First { public static void main(String[] args) { JFrame frame = new JFrame("My First Frame"); // operation to do when the window is closed. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(new BorderLayout()); frame.getContentPane().add(new JLabel("I Love Swing"), BorderLayout.CENTER); frame.pack(); frame.setVisible(true); } } Create a frame Create a text label Add the label to the content pane Choose the border layout Specify CENTER as the layout position
  • 15.
    15 Input Input • So wenow know how to present widgets on the screen • A program also needs to react to the user's actions • Examples: – When the user presses a button we want to save a file – When the user closes the program we want to ask “are you sure?” – ... • Swing mechanism: Events and Listeners
  • 16.
    16 Events, Listeners Events, Listeners •Swing defines all sorts of Listener interfaces – E.g.: ActionListener, MouseMotionListener, WindowListener, ... public interface ActionListener extends EventListener { public void actionPerformed(ActionEvent e); } public interface MouseMotionListener extends EventListener { public void mouseDragged(MouseEvent e); public void mouseMoved(MouseEvent e); } • There are default (empty) implementations for many of the listeners – E.g.: MouseMotionAdapter, WindowAdapter
  • 17.
    17 Events, Listeners (cont.) Events,Listeners (cont.) • A listener is an object that implements a listener interface • If we need to react to an event (on a certain widget) we register a listener object with that widget • E.g.: addActionListener() registers an action listener with its receiver: JButton button = new JButton(); ActionListener listener = ...; button.addActionListener(listener); • When an event occurs, all registered listeners are notified – The appropriate listener method (e.g: actionPerformed()) is invoked – An object describing the event is passed as a parameter
  • 18.
    18 Event Handling Demo:GUI Event Handling Demo: GUI
  • 19.
    19 Event Handling Demo:Code Event Handling Demo: Code import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Events implements ActionListener { public Events() { JFrame frame = new JFrame("Events"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(new FlowLayout()); JButton b = new JButton("Click me!"); b.addActionListener(this); frame.getContentPane().add(b); frame.pack(); frame.setVisible(true); } public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "Thank you"); } public static void main(String[] args) { new Events(); } }
  • 20.
    20 Inner Classes Inner Classes •Nested within another classes • Instance specific: – Has access to methods & fields of the object that created it – => An inner class has TWO this variables • Can be static – Can access only static members and methods only – A static method cannot create a non-static inner class
  • 21.
    21 Local Classes Local Classes •Same as inner classes but defined inside a method • Has access to local variables of the enclosing method – Only if the variable is defined as final • Can be anonymous – Doesn’t have a name.
  • 22.
    22 Event Handling Demo:Local Class Event Handling Demo: Local Class import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Events { public Events() { JFrame frame = new JFrame("Events"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(new FlowLayout()); JButton b = new JButton("Click me!"); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "Thank you"); } }); frame.getContentPane().add(b); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { new Events(); } }
  • 23.
    23 Accessing Fields ofEnclosing Object Accessing Fields of Enclosing Object public class A { int x = 0; public void f() { B b = new B(); b.g(); System.out.println(x); // Output: 5 } public class B { public void g() { x = 5; } } public static void main(String[] args) { new A().f(); } }
  • 24.
    24 Using the Secondthis Variable Using the Second this Variable public class A { public void f() { B b = new B(); System.out.println(b.g()); // Output: 1024 } public int g() { return 512; } public class B { public int g() { return A.this.g() * 2; } } public static void main(String[] args) { new A().f(); } }
  • 25.
  • 26.
    26 Swing's JTable Swing's JTable •Each JTable has a TableModel object that holds the data shown by the table. • DefaultTableModel is a default implementation of TableModel – By default it makes all the cells editable • We can customize its behavior by subclassing – Or we can implement TableModel from scratch • TableModelListener - a listener interface – Notified of changes in the model • Use TableModel.addTableModelListener() to register a listener object
  • 27.
    27 Contacts Book exampleoverview Contacts Book example overview • Each contact has a name and a list of attributes – Each attribute has a name and a value. • Operations: – Add contact • Contact name is immutable – Add attributes • Attribute is identified by it’s name, the attribute name is immutable, it’s value can be changed • Classes: – Contact: represents a contact and maintains list of attributes – Contact.Attribute: Inner class that represents contact attribute. – ContactTableModel: model class for the table data • Doesn’t allow to modify attribute names – ContactBook: represents the contact book widget.
  • 28.
    28 Contacts Book exampleoverview Contacts Book example overview