Sunteți pe pagina 1din 21

Java Swing

Chris North
cs3724: HCI


AWT to Swing
AWT: Abstract Windowing Toolkit
import java.awt.*
Swing: new with Java2
import javax.swing.*
Extends AWT
Tons o new improved components
Standard dialog boxes, tooltips,
Look-and-feel, skins
Event listeners
API:
http://java.sun.com/j2se/1.3/docs/api/index.html
Swing Set Demo
J2sdk/demo/jfc/SwingSet2



Many predefined
GUI components

GUI Component API
Java: GUI component = class

Properties

Methods

Events

JButton
Using a GUI Component
1. Create it
Instantiate object: b = new JButton(press me);
2. Configure it
Properties: b.text = press me; [avoided in java]
Methods: b.setText(press me);
3. Add it
panel.add(b);
4. Listen to it
Events: Listeners
JButton
Anatomy of an Application GUI
JPanel
JButton
JFrame
JLabel
GUI Internal structure
JFrame
JPanel
JButton JLabel
containers
Using a GUI Component 2
1. Create it
2. Configure it
3. Add children (if container)
4. Add to parent (if not JFrame)
5. Listen to it
order
important
Build from bottom up
Create:
Frame
Panel
Components
Listeners
Add: (bottom up)
listeners into components
components into panel
panel into frame
JPanel
JButton
Listener
JFrame
JLabel
Code
JFrame f = new JFrame(title);
JPanel p = new JPanel( );
JButton b = new JButton(press me);

p.add(b); // add button to panel
f.setContentPane(p); // add panel to frame

f.show();
press me
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); // add button to panel
f.setContentPane(p); // add panel to frame

f.show();
}
}

press me
Layout Managers
Automatically control placement of components
in a panel
Why?

Layout Manager Heuristics
Left to right,
Top to bottom
c
n
s
e w
FlowLayout GridLayout
BorderLayout
none,
programmer
sets x,y,w,h
null
One at a time
CardLayout
GridBagLayout
JButton
Combinations
JButton JButton
JTextArea
Combinations
n

JPanel: BorderLayout


c
JFrame
JPanel: FlowLayout
JButton JButton
JTextArea
Code: null layout
JFrame f = new JFrame(title);
JPanel p = new JPanel( );
JButton b = new JButton(press me);

b.setBounds(new Rectangle(10,10, 100,50));
p.setLayout(null); // x,y layout
p.add(b);
f.setContentPane(p);
press me
Code: FlowLayout
JFrame f = new JFrame(title);
JPanel p = new JPanel( );
FlowLayout L = new FlowLayout( );
JButton b1 = new JButton(press me);
JButton b2 = new JButton(then me);

p.setLayout(L);
p.add(b1);
p.add(b2);
f.setContentPane(p);

Set layout mgr before adding components
press me then me
Applets
JApplet is like a JFrame
Already has a panel
Access panel with JApplet.getContentPane( )

import javax.swing.*;

class hello extends JApplet {
public void init(){
JButton b = new JButton(press me);
getContentPane().add(b);
}
}

JApplet
contentPane
JButton
Applet Methods
Called by browser:

init( ) - initialization
start( ) - resume processing (e.g. animations)
stop( ) - pause
destroy( ) - cleanup
paint( ) - redraw stuff (expose event)
Application + Applet
import javax.swing.*;

class helloApp {
public static void main(String[] args){
// create Frame and put my mainPanel in it
JFrame f = new JFrame(title);
mainPanel p = new mainPanel();
f.setContentPane(p);
f.show();
}
}

class helloApplet extends JApplet {
public void init(){
// put my mainPanel in the Applet
mainPanel p = new mainPanel();
getContentPane().add(p);
}
}

// my main GUI is in here:
class mainPanel extends JPanel {
mainPanel(){
setLayout(new FlowLayout());
JButton b = new JButton(press me);
add(b);
}
}

JApplet
contentPane
JPanel
JFrame
JButton
or
Browser Command line
Applet Security
No read/write on client machine
Cant execute programs on client machine
Communicate only with server
Java applet window Warning

In JBuilder

S-ar putea să vă placă și