java GUI基础类库抽象窗口工具箱(Abstract Window Toolkit,AWT)位于java.awt包下 ,提供了一套与本地图形界面进行交互的接口 底层调用的系统图形库函数 由于需要跨平台保持兼容性所以只保留了一些基础函数库界面也不炫丽 由于此原因右在awt的基础上使用java语言开发了一些图形库如swing swing位于javax.swing包下 awt有的功能swing都有 awt组件名前面加J就是swing的组件名了
在AWT中,主要有以下3点 组件(Component)、容器(Container )、布局管理器(LayoutManager) 所有能在屏幕上显示的组件都是抽象类Component的子类。Component有个抽象类Container 允许其它组件加入其中包括Container 通过LayoutManager来管理布局 它有2个实现类 Panel(面板)、ScrollPane(待滚动条的面板)和Window(无边界和菜单栏的窗口) window用来展示界面的根 panel用来组织控件显示的 必须依附于window不能独立存在 我们一般不直接使用Window而是使用它的子类如Dialog(对话框)和frame(有边界菜单栏的窗口)来展示界面
public class MyFrame extends Frame{
public MyFrame(String name){
super(name);
//创建容器 并把容器添加到窗口上
Panel p = new Panel();
add(p);
//把组件添加到容器里
p.add(new TextField(20));
p.add(new Button("提交"));
//设置窗口的大小与显示区域
setBounds(50,50,350,220);
}
public void show(){
//显示窗口
setVisible(true);
}
}
public class FrameTest {
public static void main(String[] args) {
MyFrame myFrame=new MyFrame("窗口测试");
myFrame.show();
}
}
常用对话框为FileDialog
public class FileDialogTest {
Frame f = new Frame("测试");
FileDialog d1 = new FileDialog(f,"load file",FileDialog.LOAD);
FileDialog d2 = new FileDialog(f,"save file",FileDialog.SAVE);
Button b1 = new Button("open");
Button b2 = new Button("save");
public void init() {
b1.addActionListener(e->{
d1.setVisible(true);
System.out.println(d1.getDirectory()+d1.getFile());
});
b2.addActionListener(e->{
d2.setVisible(true);
System.out.println(d2.getDirectory()+d2.getFile());
});
f.add(b1);
f.add(b2,BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
new FileDialogTest().init();
}
}
效果图
常用awt组件如下
组件名称 | 构造方法 | 使用说明 |
---|---|---|
按钮(Button) | Buttonb=newButton("退出"); | 单击按钮产生ActionEvent事件,实现ActionListener接口并重写actionPenformed()方法监听和处理事件 |
复选框(Checkbox) | Checkboxch=newCheckbox("one",true) | 选中复选框产生ItemAction事件,实现ItemListener接口监听和处理事件 |
下拉菜单(Choice) | ChoicecolorChoose=newChoice() | 实现ItemListener接口监听和处理事件;Add()方法可在下拉列表中添加选项 |
画布(Canvas) | ——— |
重写Canvas类的paint()方法实现完成图形处理;实现MouseListener和KeyListener接口监听Canvas组件的鼠标和键盘事件 |
文本框(TextField) |
TextFieldft=newTextField(16);
//宽度为16个字符
|
文本框只能显示一行,按Enter键时产生ActionEvent事件,通过ActionListener接口中的actionPerformed()方法处理事件 |
文本域(TextAera) |
TextAreata=newTextArea("Textarea",4,10);
//4行10列
|
可显示多行多列文本和滚动条 |
列表框(List) |
Listlst=newList(4,false);
//4行,不允许多选
|
提供多个文本选项,支持滚动条,可以浏览多项 |
对话框(Dialog) | Window类的子类 | |
文件对话框(FileDialog) | Filedialogfd=newFiledialog(frm,"fileddilog"); | 当用户想打开或存储文件时,可使用文件对话框进行操作 |
菜单栏(MenuBar) | MenuBarmb=newMenuBar(); | 通过frm.setMenuBar(mb)语句可将菜单mb设置为Frame对象frm的主菜单 |
下拉菜单(Menu) | Menum=newMenu("Menu"); | 通过mb.add(m)可将m下拉列表添加到菜单栏中 |
菜单项(MenuItem) | MenuItemmi=newMenuItem("Openit"); | 通过mi.add(mi)将菜单项mi添加到下一个下拉列表m中。 |
颜色(Color) |
//非构造方法,两种方法设置组件背景色
setBackground(Color.BLUE);
setBackground(newColor(100,100,100));
|
通过setForeground()方法设置组件前景色,通过setBackground()方法设置组件背景色。颜色值可使用Color类的颜色常量来设置,也可通过指定RGB颜色对象值设置 |
字体(Font) |
Fontfnt=newFont("宋体",Font.BOLD,10);
//宋体,10号,加粗
|
按顺序向Font()构造方法传递有关字体设置的参数 |
常用swing组件如下
按钮(JButton)
JButton是我们常用的一个组件,其表现形式为一个按钮。
构造方法
方法 | 说明 |
---|---|
JButton() | 创建不带有设置文本或图标的按钮 |
JButton(Action a) | 创建一个按钮,其属性从所提供的 Action 中获取 |
JButton(Icon icon) | 创建一个带图标的按钮 |
JButton(String text) | 创建一个带文本的按钮 |
JButton(String text, Icon icon) | 创建一个带初始文本和图标的按钮 |
JToggleButton与JButton的区别在于JToggleButton有两个状态:按下和弹起。
方法 | 说明 |
---|---|
JToggleButton() | 创建最初未选定的切换按钮,不设置文本或图像 |
JToggleButton(Action a) | 创建一个切换按钮,其属性从所提供的 Action 获取 |
JToggleButton(Icon icon) | 创建一个最初未选定的切换按钮,该按钮具有指定的图像但是没有文本 |
JToggleButton(Icon icon, boolean selected) | 创建具有指定图像和选择状态但没有文本的切换按钮 |
JToggleButton(String text) | 创建具有指定文本的未选定的切换按钮 |
JToggleButton(String text, boolean selected) | 创建具有指定文本和选择状态的切换按钮 |
JToggleButton(String text, Icon icon) | 创建一个最初未选定的切换按钮,该按钮具有指定的文本和图像。 |
JToggleButton(String text, Icon icon, boolean selected) | 创建具有指定文本、图像和选择状态的切换按钮 |
用于短文本字符串或图像或二者的显示区。
方法 | 说明 |
---|---|
JLabel() | 创建无图像并且其标题为空字符串的 JLabel |
JLabel(Icon image) | 创建具有指定图像的 JLabel 实例 |
JLabel(Icon image, int horizontalAlignment) | 创建具有指定图像和水平对齐方式的 JLabel 实例 |
JLabel(String text) | 创建具有指定文本的 JLabel 实例 |
JLabel(String text, Icon icon, int horizontalAlignment) | 创建具有指定文本、图像和水平对齐方式的 JLabel 实例 |
JLabel(String text, int horizontalAlignment) | 创建具有指定文本和水平对齐方式的 JLabel 实例 |
复选框的实现,复选框是一个可以被选定和取消选定的项,它将其状态显示给用户。
方法 | 说明 |
---|---|
JCheckBox() | 创建一个没有文本、没有图标并且最初未被选定的复选框 |
JCheckBox(Action a) | 创建一个复选框,其属性从所提供的 Action 获取 |
JCheckBox(Icon icon) | 创建有一个图标、最初未被选定的复选框 |
JCheckBox(Icon icon, boolean selected) | 创建一个带图标的复选框,并指定其最初是否处于选定状态 |
JCheckBox(String text) | 创建一个带文本的、最初未被选定的复选框 |
JCheckBox(String text, boolean selected) | 创建一个带文本的复选框,并指定其最初是否处于选定状态 |
JCheckBox(String text, Icon icon) | 创建带有指定文本和图标的、最初未选定的复选框 |
JCheckBox(String text, Icon icon, boolean selected) | 创建一个带文本和图标的复选框,并指定其最初是否处于选定状态 |
方法 | 说明 |
---|---|
JRadioButton() | 创建一个初始化为未选择的单选按钮,其文本未设定 |
JRadioButton(Action a) | 创建一个单选按钮,其属性来自提供的 Action |
JRadioButton(Icon icon) | 创建一个初始化为未选择的单选按钮,其具有指定的图像但无文本 |
JRadioButton(Icon icon, boolean selected) | 创建一个具有指定图像和选择状态的单选按钮,但无文本 |
JRadioButton(String text | 创建一个具有指定文本的状态为未选择的单选按钮 |
JRadioButton(String text, boolean selected) | 创建一个具有指定文本和选择状态的单选按钮 |
JRadioButton(String text, Icon icon) | 创建一个具有指定的文本和图像并初始化为未选择的单选按钮 |
JRadioButton(String text, Icon icon, boolean selected) | 创建一个具有指定的文本、图像和选择状态的单选按钮 |
JTextField 是一个轻量级组件,它允许编辑单行文本。
构造方法
方法 | 说明 |
---|---|
JTextField() | 构造一个新的 TextField |
JTextField(Document doc, String text, int columns) | 构造一个新的 JTextField,它使用给定文本存储模型和给定的列数 |
JTextField(int columns) | 构造一个具有指定列数的新的空 TextField |
JTextField(String text) | 构造一个用指定文本初始化的新 TextField |
JTextField(String text, int columns) | 构造一个用指定文本和列初始化的新 TextField |
JPasswordField 是一个轻量级组件,允许编辑单行文本,其视图指示键入内容,但不显示原始字符。
方法 | 说明 |
---|---|
JPasswordField() | 构造一个新 JPasswordField,使其具有默认文档、为 null 的开始文本字符串和为 0 的列宽度 |
JPasswordField(Document doc, String txt, int columns) | 构造一个使用给定文本存储模型和给定列数的新 JPasswordField |
JPasswordField(int columns) | 构造一个具有指定列数的新的空 JPasswordField |
JPasswordField(String text) | 构造一个利用指定文本初始化的新 JPasswordField |
JPasswordField(String text, int columns) | 构造一个利用指定文本和列初始化的新 JPasswordField |
JTextArea 是一个显示纯文本的多行区域。
构造方法
方法 | 说明 |
---|---|
JTextArea() | 构造新的 TextArea |
JTextArea(Document doc) | 构造新的 JTextArea,使其具有给定的文档模型,所有其他参数均默认为 (null, 0, 0) |
JTextArea(Document doc, String text, int rows, int columns) | 构造具有指定行数和列数以及给定模型的新的 JTextArea |
JTextArea(int rows, int columns) | 构造具有指定行数和列数的新的空 TextArea |
JTextArea(String text) | 构造显示指定文本的新的 TextArea。 |
JTextArea(String text, int rows, int columns) | 构造具有指定文本、行数和列数的新的 TextArea |
流式布局管理器(FlowLayout)
FlowLayout是Panel和Applet的默认布局管理器。在该布局管理器中,组件在容器中按照从上到下或从左到右的顺序进行排列,行满后则换行。
public class FlowLayoutTest {
public static void main(String[] args) {
Frame f = new Frame("流式布局测试");
// 设置Frame使用FlowLayout布局管理器
f.setLayout(new FlowLayout(FlowLayout.LEFT,20,5));
// 向窗口添加10个按钮
for (int i = 0;i<10;i++) {
f.add(new Button("Button"+i));
}
// 设置窗口为最佳大小
f.pack();
f.setVisible(true);
}
}
int |
getHgap() : 返回组件之间的水平间距。 |
|
int |
getVgap() : 返回组件之间的垂直间距。 |
|
void |
removeLayoutComponent(Component comp): 从此边框布局中移除指定组件。 |
|
void |
setHgap(int hgap): 设置组件之间的水平间距。 |
|
void |
setVgap(int vgap) : 设置组件之间的垂直间距。 |
public class BorderLayoutTest {
public static void main(String[] args) {
Frame f = new Frame("测试窗口");
// 设置Frame容器使用BorderLayout布局管理器
f.setLayout(new BorderLayout(50,50));
//南
f.add(new Button("S"),BorderLayout.SOUTH);
//北
f.add(new Button("N"),BorderLayout.NORTH);
// 默认添加到中间区域
f.add(new Button("M"));
//东
f.add(new Button("E"),BorderLayout.EAST);
//西
f.add(new Button("W"),BorderLayout.WEST);
f.pack();
f.setVisible(true);
}
}
public class BorderLayoutDemo1 extends JFrame {
JPanel p=new JPanel();
public BorderLayoutDemo(){
setLayout(new BorderLayout(5,5));
setFont(new Font("Helvetica", Font.PLAIN, 14));
getContentPane().add("North", new JButton("North"));
getContentPane().add("South", new JButton("South"));
getContentPane().add("East", new JButton("East"));
getContentPane().add("West", new JButton("West"));
//设置面板为流式布局居中显示,组件横、纵间距为5个像素
p.setLayout(new FlowLayout(1,5,5));
//使用循环添加按钮,注意每次添加的按钮对象名称都是b
//但按钮每次均是用new新生成的,所有代表不同的按钮对象。
for(int i=1;i<10;i++){
//String.valueOf(i),将数字转换为字符串
JButton b=new JButton(String.valueOf(i));
p.add(b); //将按钮添加到面板中
}
getContentPane().add("Center",p); //将面板添加到中间位置
}
public static void main(String args[]) {
BorderLayoutDemo1 f = new BorderLayoutDemo1();
f.setTitle("边界布局");
f.pack(); //让窗体自适应组建大小
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocationRelativeTo(null); //让窗体居中显示
}
}
1
|
GridLayout gl =
new
GridLayout(
3
,
5
);
//3行5列
|
public class GridLayoutTest {
public static void main(String[] args) {
Frame f = new Frame("计算器");
Panel p1 = new Panel();
p1.add(new TextField(30));
f.add(p1,NORTH); // import static java.awt.BorderLayout.*;
Panel p2 = new Panel();
p2.setLayout(new GridLayout(3,5,4,4));
String[] name = {"0","1","2","3","4","5","6","7","8","9","+","-","*","/","."};
for (int i = 0;i
public class GridBagTest {
private Frame f = new Frame("测试窗口");
//创建GridBagLayout布局管理器
//创建GridBagConstraints对象
//创建关联 添加组件
private GridBagLayout gb = new GridBagLayout();
private GridBagConstraints gbc = new GridBagConstraints();
private Button[] bs = new Button[10];
public void init() {
f.setLayout(gb);
for (int i = 0;i
public class BoxLayoutTest {
private Frame f = new Frame("测试");
public void init() {
f.setLayout(new BoxLayout(f,BoxLayout.Y_AXIS));
// 下面按钮将垂直排列
f.add(new Button("First Button"));
f.add(new Button("Second Button"));
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
new BoxLayoutTest().init();
}
}
public class BoxTest {
private Frame f = new Frame("测试");
// 定义水平组件Box对象
private Box horizontal = Box.createHorizontalBox();
// 定义垂直组件Box对象
private Box verical = Box.createVerticalBox();
public void init() {
horizontal.add(new Button("H btn1"));
horizontal.add(new Button("H btn2"));
verical.add(new Button("V btn1"));
verical.add(new Button("V btn2"));
f.add(horizontal,BorderLayout.NORTH);
f.add(verical);
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
new BoxTest().init();
}
}
方法 | 说明 |
public CardLayout() | 创建一个间距大小为0的新卡片布局 |
public CardLayout(int hgap,int vgap) | 创建一个具有指定水平间距和垂直间距的新卡片布局。水平间距置于左右边缘。垂直间距置于上下边缘 |
public void first(Container parent) | 翻转到容器的第一张卡片 |
public void last(Contain parent) | 翻转到容器的最后一张卡片 |
public void next(Contain parent) | 翻转到指定容器的下一张卡片 |
public void previous(Contain parent) |
翻转到指定容器的前一张卡片 |
public void show(Contain parent,String name) | 翻转到使用addLayoutComponent添加到此布局的具有指定name的组件 |
public class CardLayoutDemo extends JFrame {
private JPanel pane = null;
private JPanel p = null;
private CardLayout card = null;
private JButton button_1=null;
private JButton button_2=null;
private JButton b_1=null,b_2=null,b_3=null;
private JPanel p_1=null,p_2=null,p_3=null;
public CardLayoutDemo(){
card = new CardLayout(5,5);
pane = new JPanel(card);
p = new JPanel();
button_1 = new JButton("< 上一步");
button_2 = new JButton("下一步 >");
b_1 = new JButton("1");
b_2 = new JButton("2");
b_3 = new JButton("3");
b_1.setMargin(new Insets(2,2,2,2));
b_2.setMargin(new Insets(2,2,2,2));
b_3.setMargin(new Insets(2,2,2,2));
p.add(button_1);
p.add(b_1);
p.add(b_2);
p.add(b_3);
p.add(button_2);
p_1 = new JPanel();
p_2 = new JPanel();
p_3 = new JPanel();
p_1.setBackground(Color.RED);
p_2.setBackground(Color.BLUE);
p_3.setBackground(Color.GREEN);
p_1.add(new JLabel("JPanel_1"));
p_2.add(new JLabel("JPanel_2"));
p_3.add(new JLabel("JPanel_3"));
pane.add(p_1,"p1");
pane.add(p_2,"p2");
pane.add(p_3,"p3");
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
card.previous(pane);
}
});
button_2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
card.next(pane);
}
});
b_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
card.show(pane,"p1");
}
});
b_2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
card.show(pane,"p2");
}
});
b_3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
card.show(pane,"p3");
}
});
this.getContentPane().add(pane);
this.getContentPane().add(p,BorderLayout.SOUTH);
this.setSize(300, 200);
this.setVisible(true);
}
public static void main(String[] args) {
new CardLayoutDemo();
}
}
运行效果
public class CommonComponent {
Frame f = new Frame("测试");
Button ok = new Button("Confirm");
CheckboxGroup cbg = new CheckboxGroup();
Checkbox male = new Checkbox("Male",cbg,true);
Checkbox female = new Checkbox("Female",cbg,false);
Choice colorChooser = new Choice();
List colorList = new List(6,true);
TextArea ta = new TextArea(5,20);
TextField name = new TextField(50);
public void init() {
colorChooser.add("red");
colorChooser.add("green");
colorChooser.add("blue");
colorList.add("red");
colorList.add("green");
colorList.add("blue");
Panel bottom = new Panel();
bottom.add(name);
bottom.add(ok);
f.add(bottom,BorderLayout.SOUTH);
Panel checkPanel = new Panel();
checkPanel.add(colorChooser);
checkPanel.add(male);
checkPanel.add(female);
Box topLeft = Box.createVerticalBox();
topLeft.add(ta);
topLeft.add(checkPanel);
Box top = Box.createHorizontalBox();
top.add(topLeft);
top.add(colorList);
f.add(top);
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
new CommonComponent().init();
}
}