一、总述
Java的图形用户界面由各种组件(component)构成,它们主要位于java.awt包与javax.swing包中。Swing与AWT最大的不同是,Swing在实现时,不包含任何本地代码(native),是一种“轻量级(lightweight)”的组件
Swing具有状态的组件。
二、容器
1.顶层容器:
JFrame、JApplet、JDialog 和 JWindow
2.JFrame创建的一个程序
2.1代码
import java.awt.*;
import javax.swing.*;
public class JFrameDemo{
public static void main(String args[]){
JFrame frame = new JFrame("JFrameDemo");
JButton button = new JButton("Press Me");
//first way to do that
// frame.getContentPane().add(button,BorderLayout.CENTER);
//another way to set the Pane
JPanel contentPane = new JPanel();
contentPane.setLayout(new BorderLayout());
contentPane.add(button,BorderLayout.CENTER);
frame.setContentPane(contentPane);
//frame.pack();
frame.setVisible(true);
}
}
2.2执行结果
3.面板(JPanel)
可以相互嵌套,不能独立存在,只能添加到其他窗口内部。
3.1代码
import java.awt.*;
import javax.swing.*;
public class FrameWithPanel{
public static void main(String args[]){
JFrame frame = new JFrame("Frame with Panel");
Container contentPane = frame.getContentPane();
contentPane.setBackground(Color.CYAN);
JPanel panel = new JPanel();
panel.setBackground(Color.yellow);
JButton button = new JButton("Press me");
panel.add(button);
//add JButton instance to JPanel
//add JPanel instance to JFrame's south
contentPane.add(panel,BorderLayout.SOUTH);
frame.setSize(300,200);
frame.setVisible(true);
}
}
3.2执行结果
三、布局
1.总述
组件的布局(包括位置与大小)通常由Layout Manager负责安排。Java平台提供了多种布局管理器,以下对其部分,进行说明。
2.FlowLayout Layout Manager
2.1FlowLayout 的三种构造方法
public FlowLayout()
public FlowLayout(int align)
public FlowLayout(int align,int hgap,int vgap)
构造方法中,提供了一个对齐方式的可选项align,取值有三种形式:FlowLayout.LEFT、 FlowLayout.CENTER 、FlowLayout.RIGHT。hgap和vgap可以设定组件的水平间距和垂直距离。
2.2参考代码
import java.awt.*;
import javax.swing.*;
public class FlowLayoutDemo{
private JFrame frame;
private JButton btn1,btn2,btn3;
public static void main(String args[]){
FlowLayoutDemo that = new FlowLayoutDemo();
that.go();
}
public void go(){
frame = new JFrame("Flow Layout");
Container contentPane = frame.getContentPane();
contentPane.setLayout(new FlowLayout());
btn1 = new JButton("OK");
btn2 = new JButton("Open");
btn3 = new JButton("Close");
contentPane.add(btn1);
contentPane.add(btn2);
contentPane.add(btn3);
frame.setSize(300,200);
frame.setVisible(true);
}
}
2.3执行结果
改变Frame的大小,Frame中组件的布局也会随之改变。
3.BorderLayout 布局管理器
3.1概述
BorderLayout是顶层窗口中内容窗格的默认布局管理器,被划分为BorderLayout.NORTH、BorderLayout.SOUTH、BorderLayout.WEST、BorderLayout.EAST、BorderLayout.CENTER 五个区域。
3.2构造函数
BorderLayout()
BorderLayout(int,int)
3.3示例代码
import java.awt.*;
import javax.swing.*;
public class BorderLayoutDemo{
private JFrame frame;
private JButton be,bw,bn,bs,bc;
public static void main(String args[]){
BorderLayoutDemo that = new BorderLayoutDemo();
that.go();
}
public void go(){
frame = new JFrame("Border Layout");
be = new JButton("East");
bw = new JButton("West");
bn = new JButton("North");
bs = new JButton("South");
bc = new JButton("Center");
frame.getContentPane().add(be,"East");
frame.getContentPane().add(bw,BorderLayout.WEST);
frame.getContentPane().add(bn,BorderLayout.NORTH);
frame.getContentPane().add(bs,BorderLayout.SOUTH);
frame.getContentPane().add(bc,BorderLayout.CENTER);
frame.setSize(350,200);
frame.setVisible(true);
}
}
3.4执行结果
4.GridLayout布局管理器
4.1总述
是一种网格式的布局管理器,将窗口空间分割成若干行,乘若干列的网格。组件依次放入,占一格。