java抽象窗口工具集
Abstract Window Toolkit(AWT)
java窗口类
Java Foundation Classes(JFC)Swing
和mfc一样,继承关系复杂,但是和mfc比简介多了
- 容器
显示于屏幕的所有组件都必须包含在某个容器(窗体)中,容器(窗体)是可以嵌套的。
那么肯定有一个最外层的容器(最底层的窗体)
顶层容器包括:
JFrame:标题+系统控制按钮
JApplet:小应用程序,浏览器窗口中
JWindow:不带标题和控制按钮
JDialog:对话框
2. JFrame窗口
import java.awt.*;
import javax.swing.*;
// 导入包
public class b {
public static void main(String[] args) {
// 新建一个窗口,几个按钮
JFrame frame1 = new JFrame("this is title");
JButton jb1, jb2, jb3, jb4, jb5;
// 要对窗口进行操作,必须先获得窗口getContentPane();
Container c = frame1.getContentPane();
jb1 = new JButton("上");
jb2 = new JButton("下");
jb3 = new JButton("左");
jb4 = new JButton("右");
jb5 = new JButton("中");
// 添加
c.add(jb1, BorderLayout.NORTH);
c.add(jb2, BorderLayout.SOUTH);
c.add(jb3, BorderLayout.WEST);
c.add(jb4, BorderLayout.EAST);
c.add(jb5, BorderLayout.CENTER);
//frame1.getContentPane().add(控件, 位置)
// 让窗口大小自适应到合适大小,可以显示完全控件
frame1.pack();
frame1.setVisible(true);
}
}
用a窗口的客户区内容,替换b窗口的客户区内容
import java.awt.*;
import javax.swing.*;
// 导入包
public class b {
public static void main(String[] args) {
// frame1的初始化
JPanel frame1 = new JPanel();
JButton button1 = new JButton("this is button");
// 设置页面布局器,JPanel类型默认是FlowLayout
frame1.setLayout(new BorderLayout());
frame1.add(button1, BorderLayout.CENTER);
// frame2拷贝frame1的内容
JFrame frame2 = new JFrame("this is second frame");
frame2.setContentPane(frame1);
// 显示frame2
frame2.pack();
frame2.setVisible(true);
}
}
3. JPanel面板
面板不能独立存在,必须添加到其他容器内部,面板可以嵌套,
// 背景色
JPanel.setBackground(Color.black);
JFrame.getContentPane().setBackground(Color.black);
// 窗口大小
JFrame.setSize(500, 500);
// 加入面板
JFrame.getContentPane().add(JPanel, BorderLayout.NORTH);
2. 布局管理器
这个布局管理器就是帮你实现控件的自动布局,不需要你手动控制其位置,比如说窗口大小的变化…
setLayout(new 布局管理器构造方法)//更换布局管理器
CardLayout layout=new 布局管理器构造方法
1. FlowLayout布局管理器(靠向)
FlowLayout()
FlowLayout(align) //靠上靠下靠中
FlowLayout(align,hgap,vgap)//高间隔,宽间隔
int align 参数
FlowLayout.LEFT
FlowLayout.RIGHT
FlowLayout.CENTER
2. BorderLayout布局管理器(间距)
构造方法
BorderLayout()
BorderLayout(int hgap,int vgap)
BorderLayout.EAST
import java.awt.*;
import javax.swing.*;
// 导入包
public class b {
public static void main(String[] args) {
JFrame frame1 = new JFrame();
Container c1 = frame1.getContentPane();
JButton jb0 = new JButton("this is button");
JButton jb1 = new JButton("this is button");
JButton jb2 = new JButton("this is button");
JButton jb3 = new JButton("this is button");
// 设置有间隔的布局器
c1.setLayout(new BorderLayout(100, 100));
c1.add(jb0, BorderLayout.EAST);
c1.add(jb1, BorderLayout.SOUTH);
c1.add(jb2, BorderLayout.WEST);
c1.add(jb3, BorderLayout.NORTH);
frame1.setSize(500, 500);
c1.setBackground(Color.yellow);
frame1.setVisible(true);
}
}
3. GridLayout布局管理器(长宽+间距)
它是一种类似表格的排列方式
构造方法
GridLayout
GridLayout(row,cols)
GridLayout(row,cols,hgap,vgap) // 设置几行几列,行列间隔
4. CardLayout布局管理器
有点像控件点击事件,整个窗口为一个按钮
CardLayout layout=new CardLayout();
setLayout(layout);
5. BoxLayout布局管理器
BoxLayout(container target,int axis)
垂直或者水平排列
BoxLayout(要操作的画板,画板排列方式);
所在位置:
当前布局器下的操作
BoxLayout.X_AXIS //水平
然后画板再加入frame
明天事件处理



