Transcript Java Swing

Java Swing
One of the most important features
of Java is its ability to draw
graphics.
AWT to Swing
• AWT: Abstract Window Toolkit
• import java.awt.*
• Swing: new with Java2
• import javax.swing.* extends AWT
• Depends less on underlying platform
• Many more predefined GUI components
• Event listeners
• API:
• http://docs.oracle.com/javase/8/docs/api/
GUI Component API
• Java: GUI component = class
• Properties
JButton
• Methods
• Events
Using a GUI Component
1. Create it
•
Instantiate object: b = new JButton(“press me”);
2. Configure it
•
•
Properties: b.text
Methods: b.setText(“press me”); //set this way
3. Add button b to panel
•
panel.add(b);
4. Listen to it
•
Events: Listeners
JButton
Anatomy of an Application GUI
GUI
JFrame
JPanel
Internal structure
JFrame
containers
JButton
JLabel
JPanel
JButton
JLabel
Using a GUI Component 2
1.
2.
3.
4.
5.
Create it
Configure it
Add children (if container)
Add to parent (if not JFrame)
Listen to it
order
important
Add from bottom up
Listener
JLabel JButton
JPanel
JFrame
• Create:
•
•
•
•
Frame
Panel
Components
Listeners
• Add: (bottom up)
• listeners into components
• components into panel
• panel into frame
Frames
• Swing version JFrame (extends AWT’s frame)
• Import javax.swing (‘x’ – extension package)
• Default size is 0x0 pixels
DEMO FrameTest.java
Frames
•
•
•
•
Need to extend class
Override constructor for size desired.
Select behavior on Close (for example, exit)
Starts invisible, must show
DEMO SimpleFrameTest.java
Frames
• Only a few methods to change look
• Inherits methods from superclasses
–
–
–
–
dispose – closes window and reclaims resources
setIconImage - used when window is minimized
setTitle – for menu bar of window
setResizable – takes boolean to enable/disable user’s ability
to resize window
– setLocation – position component
– setBounds – size and position component
DEMO SimpleFrameTest2.java
Inheritance Chain
Object
Component
Window
Frame
Container
JComponent
JPanel
JFrame
Panels
• Draw on a panel, which is added to frame
– Specifically to the content pane of the frame
• Displays information
– Draw strings
– Draw graphical elements
• Add components into content pane (they are containers)
SomeComponent c = new …
Container contentPane = frame.getContentPane();
contentPane.add (c);
Application Code
import javax.swing.*;
class hello
{
public static void main(String[ ] args)
{
JFrame f = new JFrame(“title”);
JPanel p = new JPanel();
JButton b = new JButton(“press me”);
p.add(b);
f.setContentPane(p);
}
}
f.show();
// add button to panel
// add panel to frame
press me
Subclasses
• Extend JPanel
• Override paintComponent method in that class to
do graphics
class MyPanel extends Jpanel
{ public void paintComponent (Graphics g)
{ //code for drawing goes here
}
DEMO NotHelloWorld.java
Painting…
• Never call paintComponent
– Event handler notifies component to paint itself
whenever needed
• Resizing, minimizing, overlapping windows, etc.
– If you need to force repainting, call repaint
instead
Subclasses cont.
class MyPanel extends Jpanel
{ public void paintComponent (Graphics g)
{
super.paintComponent (g); //superclass does job
//code for drawing goes here
g.drawString (“Java is COOL!”, 75, 100);
}
DEMO NotHelloWorld.java