目录
- GUI继承体系图
- GUI事件监听机制
- 适配器设计模式(为什么出现?)
- 窗体关闭案例
<一> GUI继承体系图(java.awt)
java.awt与javax.swing?
java.awt : Abatract Window Toolkit 抽象窗口工具包,调用本地系统方法实现功能,重量级控件;
javax.swing : javax前缀表示java扩展包,javax.swing是在AWT的基础之上建立的一套图形界面系统,组件更多,功能更强大,完全由JAVA实现,依赖AWT,属于轻量级控件。
package kyleeo.util_01;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Point;
public class FrameDemo {
public static void main(String[] args) {
//Frame是一个带有标题和边框的顶层窗口
Frame f = new Frame("FrameDemo");
//设置窗体标题
//f.setTitle("...");
//设置窗体位置
//f.setLocation(400, 200);
f.setLocation(new Point(400,200));
//设置窗体大小
//f.setSize(400,300);
f.setSize(new Dimension(400,300)); //使用匿名对象,注意与匿名内部类区分
//显示窗体(show过时已被setVisible替代)
f.setVisible(true);
}
}
<二> GUI事件监听机制
事件监听:将事件源与事件绑定;
- 事件源:产生事件的源头
- 事件:接口
- 事件处理:事件接口的实现类
- 事件绑定:将事件源与事件接口绑定(实际上是与事件接口的实现类绑定,多态向上转型)
package kyleeo.util_01;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Point;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class FrameDemo {
public static void main(String[] args) {
//Frame是一个带有标题和边框的顶层窗口
Frame f = new Frame("FrameDemo");
//事件监听
//匿名内部类,注意与匿名对象区分
f.addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) {
}
@Override
public void windowIconified(WindowEvent e) {
}
@Override
public void windowDeiconified(WindowEvent e) {
}
@Override
public void windowDeactivated(WindowEvent e) {
}
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
}
@Override
public void windowActivated(WindowEvent e) {
}
});
//设置窗体标题
//f.setTitle("...");
//设置窗体位置
//f.setLocation(400, 200);
f.setLocation(new Point(400,200));
//设置窗体大小
//f.setSize(400,300);
f.setSize(new Dimension(400,300)); //使用匿名对象,注意与匿名内部类区分
//设置窗体位置及大小
//f.setBounds(400, 200, 400, 300);
//f.setBounds(new Rectangle(400, 200, 400, 300));
//显示窗体(show过时已被setVisible替代)
f.setVisible(true);
}
}
<三> 适配器设计模式(窗体关闭案例)
为什么出现适配器设计模式?
接口(100个方法) -> 实现类(只想使用该接口中的一种功能,必须实现所有100个方法,尽管是空实现)
接口(100个方法) -> 适配器(这里空实现所有接口) -> 实现类(entends继承适配器,重写需要方法即可)
适配器是一个接口的空实现类,相当于中间件,减少代码量:
package kyleeo.util_01;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Point;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class FrameDemo {
public static void main(String[] args) {
//Frame是一个带有标题和边框的顶层窗口
Frame f = new Frame("FrameDemo");
//事件监听
//匿名内部类,注意与匿名对象区分
// f.addWindowListener(new WindowListener() {
//
// @Override
// public void windowOpened(WindowEvent e) {
// }
//
// @Override
// public void windowIconified(WindowEvent e) {
// }
//
// @Override
// public void windowDeiconified(WindowEvent e) {
// }
//
// @Override
// public void windowDeactivated(WindowEvent e) {
// }
//
// @Override
// public void windowClosing(WindowEvent e) {
// System.exit(0);
// }
//
// @Override
// public void windowClosed(WindowEvent e) {
// }
//
// @Override
// public void windowActivated(WindowEvent e) {
// }
// });
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//设置窗体标题
//f.setTitle("...");
//设置窗体位置
//f.setLocation(400, 200);
f.setLocation(new Point(400,200));
//设置窗体大小
//f.setSize(400,300);
f.setSize(new Dimension(400,300)); //使用匿名对象,注意与匿名内部类区分
//设置窗体位置及大小
//f.setBounds(400, 200, 400, 300);
//f.setBounds(new Rectangle(400, 200, 400, 300));
//显示窗体(show过时已被setVisible替代)
f.setVisible(true);
}
}