1、AWT概述
AWT继承体系,one write,run anywhere.
Winow是可以独立存在的顶级窗口,默认使用BorderLayout管理其内部组件布局;
Panel可以容纳其他组件,但不能独立存在,它必须内嵌其他容器中使用,默认使用FlowLayout管理其内部组件布局;
ScrollPane 是 一个带滚动条的容器,它也不能独立存在,默认使用 BorderLayout 管理其内部组件布局;
常见API
Component作为基类,提供了如下常用的方法来设置组件的大小、位置、可见性等。
方法签名 方法功能
setLocation(int x, int y) 设置组件的位置。
setSize(int width, int height) 设置组件的大小。
setBounds(int x, int y, int width, int height) 同时设置组件的位置、大小。
setVisible(Boolean b): 设置该组件的可见性。
Container 作为容器根类,提供了如下方法来访问容器中的组件
package com.one.container;
import java.awt.*;
public class WindowDemo {
public static void main(String[] args) {
// 1、创建一个窗口对象
Frame frame=new Frame("我创建的第一个窗口");
// 2、指定窗口的位置、大小
// 设置组件位置
frame.setLocation(100,100);
// 设置组件大小
frame.setSize(500,300);
// 3、设置窗口对象可见
frame.setVisible(true);
}
}
方法签名 方法功能
Component add(Component comp) 向容器中添加其他组件 (该组件既可以是普通组件,也可以 是容器) , 并返回被添加的组件 。
Component getComponentAt(int x, int y): 返回指定点的组件 。
int getComponentCount(): 返回该容器内组件的数量 。
Component[] getComponents(): 返回该容器内的所有组件 。
Java语言常见的包
2、布局容器
布局管理器
设置最佳大小,frame.pack();
3、BorderLayout 边框布局(东西南北中)
注意:如果不往某个区域放入组件,那么该区域不会空白出来,而是被其他区域占用
解决办法:将组件放入panel容器中,就可以看到所有的组件了。
package com.one.layout;
import java.awt.*;
public class BorderLayoutDemo2 {
public static void main(String[] args) {
Frame frame = new Frame("BorderLayout布局管理器测试");
// 指定frame的布局容器为BorderLayout
frame.setLayout(new BorderLayout(100,50));
// 往frame添加按钮组件
frame.add(new Button("北侧按钮"),BorderLayout.NORTH);
frame.add(new Button("南侧按钮"),BorderLayout.SOUTH);
// frame.add(new Button("中部按钮"),BorderLayout.CENTER);
//
// frame.add(new TextField("文本默认居中显示"));
Panel p = new Panel();
p.add(new TextField("文本测试"));
p.add(new Button("中部按钮"),BorderLayout.CENTER);
frame.add(p);
// 设置frame为最佳大小
frame.pack();
frame.setVisible(true);
}
}
4、GridLayout网格布局
5、GridBagLayout
比GridLayout强大,但是比较复杂
6、CardLayout 卡片布局管理容器
package com.one.layout;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CardLayoutDemo {
public static void main(String[] args) {
Frame frame = new Frame();
// 1、创建cardLayout对象
CardLayout cardLayout = new CardLayout();
Panel p1 = new Panel();
p1.setLayout(cardLayout);
// 2、往panel中存储多个组件
String [] names={"第一张","第二张","第三张","第四张","第五张"};
for(int i=0;i< names.length;i++){
p1.add(names[i],new Button(names[i]));
}
/* p1.add("第一张",new Button("第一张"));
p1.add("第2张",new Button("第2张"));*/
// 3、把panel放到frame中间区域
frame.add(p1);
// 4、创建panel对象,p2用来存储多个按钮组件
Panel p2 = new Panel();
// 5、创建5个按钮组件
Button b1 = new Button("上一张");
Button b2 = new Button("下一张");
Button b3 = new Button("第一张");
Button b4 = new Button("最后一张");
Button b5 = new Button("第三张");
// 创建一个事件监听器,监听按钮的点击动作
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String actionCommand = e.getActionCommand();
switch(actionCommand){
case "上一张":
cardLayout.previous(p1);
break;
case "下一张":
cardLayout.next(p1);
break;
case "第一张":
cardLayout.first(p1);
break;
case "最后一张":
cardLayout.last(p1);
break;
case "第三张":
cardLayout.show(p1,"第三张");
break;
}
}
};
// 把当前这个时间监听器和多个按钮绑定在一起
b1.addActionListener(listener);
b2.addActionListener(listener);
b3.addActionListener(listener);
b4.addActionListener(listener);
b5.addActionListener(listener);
// 把按钮添加到容器p2中
p2.add(b1);
p2.add(b2);
p2.add(b3);
p2.add(b4);
p2.add(b5);
// 把panel放到frame南侧区域
frame.add(p2,BorderLayout.SOUTH);
frame.pack();;
frame.setVisible(true);
}
}
7、BoxLayout
Swing引入的一个新的布局容器
package com.one.layout;
import javax.swing.*;
import java.awt.*;
public class BoxLayoutDemo03 {
public static void main(String[] args) {
Frame frame = new Frame();
// 1、创建Box水平容器
Box hb = Box.createHorizontalBox();
// 2、给水平布局容器添加按钮组件
hb.add(new Button("水平按钮1"));
// 设置水平按钮 固定 间距
hb.add(Box.createHorizontalGlue());
hb.add(new Button("水平按钮2"));
hb.add(Box.createHorizontalStrut(30));
hb.add(new Button("水平按钮3"));
Box vb = Box.createVerticalBox();
vb.add(new Button("垂直按钮1"));
vb.add(Box.createVerticalGlue());
vb.add(new Button("垂直按钮2"));
vb.add(Box.createVerticalStrut(30));
vb.add(new Button("垂直按钮3"));
frame.add(hb,BorderLayout.NORTH);
frame.add(vb);
frame.pack();
frame.setVisible(true);
}
}