java_GUI
Graphical User Interface(图形用户接口)。
1.如何创建一个窗口并显示
常说java代码一处编译到处运行,但javaGUI是一处编译到处调试
2.GUI布局管理器
* FlowLayout(流式布局管理器)
* 从左到右的顺序排列。
* Panel默认的布局管理器。
* BorderLayout(边界布局管理器)
* 东,南,西,北,中
* Frame默认的布局管理器。
* GridLayout(网格布局管理器)
* 规则的矩阵
* CardLayout(卡片布局管理器)
* 选项卡
* GridBagLayout(网格包布局管理器)
* 非规则的矩阵
3.GUI窗体监听
4.GUI鼠标监听
5.GUI键盘监听和键盘事件
6.GUI动作监听
public class a {
/**
* @param args
*/
public static void main(String[] args) {
Frame f = new Frame("我的第一个窗口");
f.setSize(400, 600); //设置窗体大小
f.setLocation(500, 50); //设置窗体位置
f.setIconImage(Toolkit.getDefaultToolkit().createImage("javagui.jpg"));
Button b1 = new Button("按钮一");
Button b2 = new Button("按钮二");
f.add(b1);
f.add(b2);
f.setLayout(new FlowLayout());//设置布局管理器
//f.addWindowListener(new MyWindowListener );
//f.addWindowListener(new MyWindowAdapter());
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
b1.addMouseListener(new MouseAdapter() {
/*@Override
public void mouseClicked(MouseEvent e) {//单击,不给力,推荐用释放
System.exit(0);
}*/
@Override
public void mouseReleased(MouseEvent e) { //释放
System.exit(0);
}
});
b1.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
//System.exit(0);
//System.out.println(e.getKeyCode());
//if(e.getKeyCode() == 32) {
/*if(e.getKeyCode() == KeyEvent.VK_SPACE){
System.exit(0);
}*/
}
});
b2.addActionListener(new ActionListener() {
//添加动作监听,应用场景就是暂停视频和播放视频
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(e);
System.exit(0);//table + 默认空格
}
});
f.setVisible(true);
}
}
/*class MyWindowListener implements WindowListener {
@Override
public void windowOpened(WindowEvent e) {
}
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
System.out.println("Closed");
}
@Override
public void windowIconified(WindowEvent e) {
}
@Override
public void windowDeiconified(WindowEvent e) {
}
@Override
public void windowActivated(WindowEvent e) {
}
@Override
public void windowDeactivated(WindowEvent e) {
}
}
*/
/*class MyWindowAdapter extends WindowAdapter {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}*/
GUI需要知道的
* 事件处理 * 事件: 用户的一个操作 * 事件源: 被操作的组件 * 监听器: 一个自定义类的对象, 实现了监听器接口, 包含事件处理方法,把监听器添加在事件源上, 当事件发生的时候虚拟机就会自动调用监听器中的事件处理方法
适配器设计模式
* a.什么是适配器
* 在使用监听器的时候, 需要定义一个类事件监听器接口.
* 通常接口中有多个方法, 而程序中不一定所有的都用到, 但又必须重写, 这很繁琐.
* 适配器简化了这些操作, 我们定义监听器时只要继承适配器, 然后重写需要的方法即可.
* b.适配器原理
* 适配器就是一个类, 实现了监听器接口, 所有抽象方法都重写了, 但是方法全是空的.
* 适配器类需要定义成抽象的,因为创建该类对象,调用空方法是没有意义的
* 目的就是为了简化程序员的操作, 定义监听器时继承适配器, 只重写需要的方法就可以了.
public class b {
/**
* @param args
* 适配器设计模式
* 鲁智深,他不爱做和尚本该做的事,只喜欢练武
* 定义一个和尚接口
* 定义一个抽象类适配器实现接口,为空方法
* 定义鲁智深要实现和尚接口中习武的这个方法,只需继承这个适配器,重写需要的方法
*/
public static void main(String[] args) {
}
}
//接口
interface 和尚 {
public void 打坐();
public void 念经();
public void 撞钟();
public void 习武();
}
/**
* 适配器,就是一个类,实现了接口,所有抽象方法都重写了,但是方法全是空的.
* 适配器类需要定义成抽象的,因为创建该类对象,调用空方法是没有意义的
* 目的就是为了简化程序员的操作,定义监听器时继承适配器,只重写需要的方法就可以了
*否则直接实现接口需要实现接口中的所有方法
**/
abstract class 天罡星 implements 和尚 {
@Override
public void 打坐() {
}
@Override
public void 念经() {
}
@Override
public void 撞钟() {
}
@Override
public void 习武() {
}
}
//要实现接口只需继承这个适配器类,重写我们需要的方法
class 鲁智深 extends 天罡星 {
public void 习武() {
System.out.println("倒拔垂杨柳");
System.out.println("拳打镇关西");
System.out.println("大闹野猪林");
System.out.println("......");
}
}