一、实现界面的三部曲:组件、布局、事件
二、JFrame
(1)JFrame设置为可关闭:
setDefaultCloseOperation(EXIT_ON_CLOSE);
(2)对于JFrame、JDialog、JApplet,有ContentPane的容器:
getContentPane().add(label);//或直接用add(label); getContentPane().setLayOut(...);//或直接用setLayOut(...);
三、事件处理
(1)组件添加事件处理的函数:
addActionListener();
(2)事件处理器ActionListener是一个接口,是AWTEventListener的子接口,实现该接口必须实现函数void ActionPerformed(ActionEvent e)
(3)事件类Event包含的信息:
事件源:getSource() //得到的Object可以通过强制类型转换成相应的类型
事件的具体情况:
如MouseEvent的getX()、getY()方法得到鼠标的坐标
KeyEvent的getKeyChar()得到当前的字符等等
(4)事件适配器类(Adapter)----简化实现Listener
在extends事件适配器时,只需要Override自己所需要的方法即可
常见的事件适配器:
ComponentAdapter(组件适配器)、ContainerAdapter(容器适配器)、
FocusAdapter(焦点适配器)、KeyAdapter(键盘适配器)、
MouseAdapter(鼠标适配器)、MouseMotionAdapter(鼠标运动适配器)、
WindowAdapter(窗口适配器)
(5)事件的注册:addxxxxListener
实现监听器:匿名类(new xxxxListener(){实现代码}) / (new xxxxAdapter(){实现代码})、
implements xxxxListener 、
extends xxxxListener、
Lamda表达式(针对只有一个方法的接口)
(6)一个对象可以注册多个监听器、多个对象可以注册同一个监听器(使用getSource()得到是哪一个对象)
四、事件与线程
线程中,如果要更新界面,要放到the event dispatching thread中,也就是要调用SwingUtilities.invokeLater()方法