事件处理:
ActionEvent && WindowEvent:
ActionEvent -- 包含一个ACTION_PERFORMED。触发的动作有单击button,双击选项,选择指定菜单项,回车键输入等。
addActionListener(<al>) -- al ->ActionListener or a class implements ActionListener。
button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event){ buttonPanel.setBackground(backgroundColor); } });
上述代码相当于声明一个类实现ActionListener接口然后在类中实现actionPerformed方法。其中backgroundColor应该被定义为final。
为什么这样做,因为java编译器在进行编译的时候会自动生成构造器,换言之就会多生成一个类,如下图所示,类文件“ButtonFrame$1.class”,而在值传递时候被传递的值一旦被赋值是不允许在发生更改的,要不会出现不一致的情况。
EventHandler -- create() 可以用于动态创建监听器。作用对象必须是public, 否则构建失败。
EventHandler.create(Class actionInterfaceClass, Object Target, String actionList, String PrpertiesList);
actionList,PropertiesList -- "action.action1.action2..." && "Para1. Para2." 用点好隔开多个元素。(不是很懂-- 待补充)
Listener是用于监控event的,内含actionPerformed方法是处理event的。
JComponent && JPanel:
JComponent是斯普皮Swing组件(除了最上层的组件)的容器。
JPanel是JComponent的一种,是一种轻量级的容器,有很多种布局,在Java API中的继承顺序是: Java.awt.Container --> javax.swing.JComponent --> javax.swing.JPanel
事件处理的核心是:一个对象添加一个监听器用于对某个Action事件进行处理:
object.addActionListener(new ActionListener(){}); (匿名内部类 -- 定义一个实现了ActionListener接口的类的对象)
--> object.addActionListener(new ActionListener(){ public void actionPerformed(){} });
--> object.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event){} });
所以根源在于定义一个Action,并且定义好一个处理Action的方法 (new ActionSample implements ActionListener { public void actionPerformed(ActionEvent event){}}),然后在定义某对象实例的时候用 smpleObject.addActionListener(ActionSample);来对实例添加事件处理监听器。
一个Java名词:适配器类。适用范围,定义的接口中有诸多方法,但用于实现该接口的类只需要接口中定义的一部分方法,所以这时候需要一个类来实现这个接口作为一个适配器类,在该适配器类中所有接口种方法实现均为空,这样原来需要实现这个接口的类就可以通过继承该适配器类而达到只对部分类进行重写,避免内容冗余。联想到匿名内部类,首先匿名内部类是用于定义一个实现了某个借口或者继承了某个类的类的对象,因此如果设定一个实现了某个借口的适配器类,然后将该适配器类应用于匿名内部类,就可以避免在匿名内部类的定义部分实现很多没有必要的方法,从而美观java代码以及提高可读性。
语义事件:描述用户动作的事件,如点击按钮;
低级事件:组成语义事件的事件,例如点击按钮过程中的移动鼠标,抬起鼠标,按下鼠标按钮;