GUI在awt和swing包下
java.xxx 基本的、标准的java包,javax.xxx基本java扩展包
java.awt(抽象窗口工具包):需要调用本地系统方法实现功能。属重量级控件
javax.swing:在awt的基础上,建立的一套图形界面系统,其中提供了更多
的组件,而且完全由java实现。增强了移植性,属轻量级控件
java.awt和javax.swing的轻重量级控件不是包的轻重,而是指系统的关联性,重量级移植性差
java.awt--Component
component是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。典型图形用户界面中的按钮、复选框和滚动条都是组件示例
window对象是一个没有边界和菜单栏的顶层窗口。窗口的默认布局是BorderLayout
Frame是带有标题和边框的顶层窗口
组件就是一个对象,对象有变量和方法。组件就是一组相关的方法和变量的集合,相关的对象
设置窗口标题
x.setTitle();
设置窗口大小 (单位:像素)
x.setSize(); == Dimension(int width, int height)
//构造一个Dimension,并将其初始化为指定宽度和高度
Dimension d=new Dimension(x,y);
x.setSize(d);
Dimension类封装单个对象中组件的宽度和精度(精确到整数)。该类与组件的某个属性关联
设置窗口位置
x.setLoaction(x,y); == Point(int x, int y)
//表示(x,y)坐标空间中的位置的点,以整数精度指定
Point p =new Point(x,y);
x.setLocation(p);
有的写一些小游戏可能用的Dimension和Point写的
设置窗口可见
x.setVisible();
等于窗口位置和窗口大小
x.setBounds(x, y, width, height);
窗口关闭的机制(事件监听机制):
A:事件源 被监听的对象或者事件发生的地方
B:事件 就是要发生的事件
C:事件处理 就是针对发生的事情做出的处理方案
D:事件监听 就是把事件源和事件关联起来
举例:人受伤事件
事件源:人(具体的对象)
Person p1 = new Person("张三");
Person p2 = new Person("李四");
事件:受伤
interface 受伤接口{
一拳(){};
一脚(){};
一板砖(){};
}
事件处理:
受伤处理类 implements 受伤接口{
一拳(){System.out.println("鼻子流血了,送到卫生间洗洗");};
一脚(){System.out.println("晕倒了,送到通风处");};
一板砖(){System.out.println("头破血流,送到太平间");};
}
事件监听:
p1.注册监听(受伤接口);
如果看到一个方法的参数是一个接口(处理方式):
1、定义一个外部类,实现这个接口
2、匿名内部类
关闭窗口
x.addWindowListener(new WindowListener(){
public void windowOpened(WindowEvent e){
}
public void windowIconified(WindowEvent e){
}
public void windowDeiconified(WindowEvent e){
}
public void windowDeactivated(WindowEvent e){
}
public void windowClosing(WindowEvent e){
System.exit(0);
}
public void windowClosed(WindowEvent e){
}
public void windowActivated(WindowEvent e){
}
});
适配器模式
同一个包下,连接各个类:
https://www.bilibili.com/video/av37614313?p=707
用适配器类改进关闭窗口
x.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
按钮点击事件
需求:把按钮添加到窗体,并对按钮添加一个点击事件
A:创建窗体对象
Frame f=new Frame();
B:创建按钮对象
Button bn =new Button();
C:把按钮添加到窗体
f.setBounds(x,y,width ,height);
D:窗体显示
f.setVisible();
窗口布局:窗口中组件的排列方式
1、流式布局FlowLayout
2、边界布局BorderLayout(五个布局)
3、网格布局GridLayout
4、网格包布局GridBagLayout
5、卡片布局CardLayout
设置布局
x.setLayout(new FlowLayout());
创建文本框
TextField tf = new TextFiel(int columns);
int columns=x
这里的x表示可以在文本框中创建x个字符
创建文本域
TextArea ta = new TextArea(int row,int columns);
row:行,columns:列
清空数据
x.setText("");
设置文本域
x.setText(xx);
追加和换行
x.append(+"\r\n");
获取光标
x.requestFocus();
向文本框中输入数字
在适配器中输入:
x.addKeyListener(new KeyAdapter(){
public void KeyPressed(ActionEvent e){
//先获取字符,在判断字符,取消事件
char ch =e.getKeyChar();
if(!(ch>='0' && ch<='9')){
e.consume();
}
}
});
LayoutManager 如何布置Container类接口
做图形界面开发时,用swing包下的东西
Toolkit类是所有Abstract Window Toolkit 实际实现的抽象超类。Toolkit的子类被用于将各种组件绑定到特定本机工具实现
获取工具类对象
//public static Toolkit getDefaultToolkit();获取默认工具包
Toolkit tk = Toolkit.getDefaultToolkit();
根据路径获取图片
Image i=tk.getImage();
给窗体设置图片
jf.setIconImage();
一般流程:
1、创建窗体
Frame f=new Frame();
2、设置窗口大小和位置
f.setBounds(x, y, width, height);
3、设置布局
f.setLayout(new FlowLayout());
4、创建想要的组件
Xxx x1 =new Xxx();
5、把组件添加到窗体
f.add(x1);
6、设置适配器(关闭虚拟页面)
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
7、对组件(按钮)添加事件
f.addXxxxxListener(new XxxxListener(){
public void xxXxx(XxxxEvent e){
程序执行···
}
});
8、设置窗体显示(true:可视 false:不可视)
f.setVisible(true);
参考网站
https://www.bilibili.com/video/av37614313?p=700