9 图形化界面
9.1.AWT和Swing包
-
java.awt包:抽象窗口工具集包含的类,如按钮、标签、菜单、对话框。AWT集中包含本地代码,组件外观和界面显示风格与本地平台有关;AWT中定义的组件被称为重量级组件。
java.awt包含Dimention、Font、Color、Component等类及其子类。 -
javax.swing包:大部分Swing组件不包含本地代码,组件外观与本地平台无关,可以自行设定。不包含本地代码的Swing组件成为轻量级组件。但Swing组件中的JFrame和JDialog属于重量级组件。
javax.swing包含JFrame、JDialog、JComponent等类及其子类。
9.1.1 辅助类
设置GUI属性的类。
Dimention:将组建高宽封装在对象
Font:设置字体
FontMetrics:获取字体属性
Color:设置颜色
Graphics:提供图形环境,用于绘制图形
LayoutManager:设置组件摆放方式
9.1.2 组件类
JComponent是所有轻量级Swing组件的父类,常用的由按钮JButton、标签JLabel、文本框JTestField、文本区JTestArea、列表框JList等。可以通过创建这些类的实例才产生这些组件。同时这些组件不能独立存在,必须放在容器内。
JButton jb = new JButton(“OK”);
JLabel j1 = new JLabel(“欢迎”);
9.1.3 容器类
可以容纳其他组件的类,Swing中的JFrame、JDialog、JPanel都是容器类。
- JFrame:GUI顶级窗口,不能放在其它窗口。Windows类的子类,具有标题栏,窗口大小可以改变。
- JDialog:对话框窗口。Windows类的子类,具有标题栏,窗口大小不可以改变。
- JPanel(面板):不可见的容器,不能单独显示,面板可以嵌套。还可以作为画布画图。 以上均为Container类的间接子类,都能使用Container类的add()方法向容器中添加组件。
9.1.3.1 JFrame
- 构造方法:
public JFrame()
public JFrame(String title) - 常用方法:
- public Container getContentPane():内容嵌板,向JFrame添加组件实际是在内容嵌板上添加的。
JFrame jf = new JFrame();
JButton jb = new JButton(“OK”);
jf.getContentPane ( ) .add ( jb );//**通常写为jf.add(jb);**
-
public void setContentPane( Container contentPane):除了用getContentPane()得到内容嵌板,也可以将现有的容器,如JPanel设为内容嵌板。
-
public void setDefaultCloseOperation(int operation):设置JFrame窗口右上角的关闭按钮×的默认动作。这里的参数如下(定义在WindowConstants中)
DO_NOTHING_ON_CLOSE,单击关闭按钮,系统什么都不做
HIDE_ON_CLOSE,单击关闭按钮,隐藏窗口,但不释放、退出程序
DISPOSE_ON_CLOSE,…,隐藏并释放窗口
EXIT_ON_CLOSE,…,关闭窗口,并退出应用程序
不使用本方法设置关闭按钮操作,默认HIDE_ON_CLOSE -
public void setLayout(LayoutManager manager):设置版面布局方式
-
public void setJMenuBar(JMenuBar menebar):在JFrame窗口添加菜单栏
- JFrame常用继承:
- public Component add(Compponent comp):在JFrame窗口添加组件
- public void setBackground(Color c):设置JFrame窗口背景色,由于内含内容嵌板,故直接设置内容嵌板的背景色即可。
- public void setLocation(int x,int y):设置JFrame窗口显示的位置,原点(0,0)在该组件所在的上一层组件的左上角,x表示向右增加,y表示向下增加
- public void setSize(int width,int height):设置JFrame窗口大小
- public void setVIsible(boolean b):设置JFrame窗口是否显示,true显示,false不显示。
示例1:
import javax.swing.*;
import java.awt.*;
public class MyFrame{
/*private JFrame f ;
public MyFrame() {
f=new JFrame("My First GUI");
}*/
private JFrame f=new JFrame("My First GUI");
JButton jb = new JButton("OK");
public void launchFrame(){
f.setSize(170,170);
f.setLocation(50,50);
Container c = f.getContentPane();
c.setBackground(Color.WHITE);
c.add(jb);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args[]){
MyFrame mf = new MyFrame();
mf.launchFrame();
}
}
示例2:示例1是在自定义类中直接创建JFrame对象产生,还可以定义一个类,让该类继承JFrame来创建窗口。
import javax.swing.*;
import java.awt.*;
public class MyFrame extends JFrame{
public static void main(String args[]){
MyFrame f=new MyFrame();
f.setTitle("My First GUI");
JButton jb = new JButton("OK");
f.setSize(170,170);
f.setLocation(50,50);
Container c = f.getContentPane();
c.setBackground(Color.WHITE);
c.add(jb);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
9.1.3.2 JPanel(面板)
9.2.版面布局管理器
下面介绍java.awt包中的:
- FlowLayout:
- 按照添加组件的顺序从左往右排列在容器中,排满一行,再开始新的一行。组件大小为默认最佳大小(恰好能容纳文本),改变容器大小,组件位置改变,但大小不变。
- 是Panel、JPanel、Applet等容器默认的布局管理器。
- 构造方法:
public FlowLayout()。对齐方式为剧中,水平和垂直间距都是5个单位
public FlowLayout(int align)。指定对齐方式(align)、水平和垂直间距都是5个像素。居左:FlowLayout.LEFT;居右:FlowLayout.RIGHT;居中:FlowLayout.CENTER
public FlowLayout(int align,int hgap,int vgap)。指定对齐方式,水平间距,垂直间距。
创建好以后,可以根据setAlingment(int align)、setHgap(int hgap)、setVgap(int vgap)方法重新设置对齐方式、水平间距和垂直间距。
4.略过
- BorderLayout:
- 将容器分为东西南北中五个区域
- GridLayout:
- 将容器平均分割成若干个(行数乘列数)网格,按从左到右的顺序添加组件,添加满一行,再开始新的一行。添加到网格的组件手网格大小的约束。
- GarLayout:
- 1.使容器可以收纳一系列卡片的布局管理器。卡片被一张张添加到容器,但在某一时刻只能显示一张卡片上的内容。程序如果不特别指定,首次运行时显示第一个被添加的卡片。