在java中的事件处理中,包括三部分:
事件源—事件对象—事件监听器;
一、所有的事件都在java.awt.event和javax.swing.event中;
我们可以查阅光放文档来学习这些事件的内容
现在的一个问题是我们很难全部记住每个组件能够产生的事件类型,也不能够全部记住每个组件针对具体的事件应该添加哪种事件监听器,下面提供一种非常好的方法:
(1)当我们因为某个事件,需要为某个组件注册一个事件监听器时,就在官方文档中查阅该组件的所有的形如:addActionListener()的方法,这样一来我们就知道了这个组件都能够注册那些监听器(去掉add就是ActionListener监听器,也就是说不仅仅只有ActionListener这一种事件监听器,还有很多种类,如ItemListener等,我们必须为指定的组件指定合适的能够处理程序所要求的正确的监听器);
(2)之后我们可以在官方文档中查阅这些这些监听器(如:ActionListener)接口的所有需要被重写的方法,如actionPerformed(ActionEvent e)(有些监听器接口中要重写的方法不是actionPerformed()而是其他的方法,不要误认为所有的监听器接口都要实现actionPerformed方法),从参数中就能够知道该监听器到底接收哪种事件,ActionEvent,只要上网搜索就能够知道该事件是不是我们想要处理的那个事件,
(3)通过上面的步骤我们就能够知道到底要添加哪种监听器,从而创建这种监听器的子类或者通过适配器(由于有的监听器接口中要重写的方法不仅仅只有一个,但是如果我们只想重写其中一个或者几个的话,那么就可以使用适配器),在实现里面的方法就没有问题了
二、我们列举一些常用的事件类:
《》java.awt.event.ActionEvent
——动作事件,如鼠标单击
能够触发这个事件的组件有:
JButton(鼠标单击)、JTextField(输入回车)、JPasswordField(输入回车);
《》java.awt.event.AdjustmentEvent
——调整事件,如移动滚动条的滑块位置
《》java.awt.event.ComponentEvent
——组件事件,如移动组件或改变组件大小
(java.awt.event.ComponentListener
java.awt.event.ComponentAdapter)
《》java.awt.event.FocusEvent
——焦点事件,如得到或失去焦点
一般是说像文本框这样的控件,如果它得到键盘焦点的话,他就能够接收键盘输入的字符;否则就不能够得到键盘输入的字符
(java.awt.event. FocusListener
java.awt.event. FocusAdapter)
《》java.awt.event.ItemEvent
——项事件,如单、复选框、下拉式框中的选中状态发生变化
(java.awt.event.ItemListener)
触发该事件的组件有:
JCheckBox、JRadioButton、JComboBox;当鼠标单击引起选择状态放生变化时
《》java.awt.event.KeyEvent
——键盘事件,如通过键盘输入字符
(java.awt.event.KeyListener
java.awt.event.KeyAdapter)
《》java.awt.event.MouseEvent
——鼠标事件,如按下鼠标按键
(java.awt.event.MouseListener
java.awt.event.MouseAdapter)
《》java.awt.event.MouseWheelEvent
——鼠标滚轮事件
(java.awt.event.MouseWheelListener)
《》java.awt.event.WindowEvent
——窗口事件
(java.awt.event.WindowListener
java.awt.event.WindowAdapter)
《》javax.swing.event.DocumentEvent
——文档事件,如文本区域的内容发生变化
(javax.swing.event.DocumentListener)
触发该事件的组件有:
JTextField、JPasswordField、JTextArea;
当文本区域的属性或者内容发生变化时
至于Document的使用,可以查一下,就不在多说了
《》javax.swing.event.ListSelectionEvent
——列表选择事件,如列表框选项发生变化(如JList)
(javax.swing.event.ListSelectionListener)
触发该事件的组件有JList;当当前被选中的列表选项改变时
三、当我们实现了那些事件监听类的抽象方法后,参数位置就是接收的事件类型如
public void actionPerformed(ActionEvent evt) ;
一般在事件类中都有方法:
public Object getSource();
//用来返回当前事件的事件源组件,通过向下转型就能够得到事件源组件,如:JButton bt = (JButton)evt.getSource() ;
这样一旦得到这个事件源组件,我们就能够利用这个组件的各种方法来查看组件的各种属性和状态,这样就能够做非常多的事情了
此外不同的事件类中还有不同的方法,就不再介绍
四、如果每个组件注册的事件监听器都不共用,即一个组件唯一的注册一个自己的监听器的话,那么在创建事件监听器时,使用适配器的匿名内部类是非常好的选择
五、《》鼠标事件处理
鼠标事件处理就分为上面介绍的三种:鼠标事件监听、鼠标移动监听、鼠标滚轮事件监听;
——java.awt.event.MouseListener
①public interface MouseListener extends EventListener{
public void mouseClicked(MouseEvent e) ;
//处理完整的鼠标单击事件
public void mousePresses(MouseEvent e);
//处理按下鼠标事件
public void mouseReleased(MouseEvent e);
//处理放开鼠标事件
public void mouseEntered(MouseEvent e) ;
//处理鼠标进入组件事件
public void mouseEntered(MouseEvent e);
//处理鼠标离开组件事件
}
②在MouseEvent类中的成员方法:
public Point getPoint() ;//返回鼠标在组件中的位置
public int getX() ;
public int getY() ;
public int getModifiers()
//返回点击了鼠标的那个按键,左右键或话滑轮键
那么我们如何知道这些按键对应的整型值呢?
在抽象类InputEvent中很多的静态常量,这些静态常量指定了
到底是那个按键如:BUTTON1_MASK——点击了鼠标的左键
BUTTON2_MASK——点击了鼠标的滑轮键
BUTTON3_MASK——点击了鼠标的右键
还有很多可以随时查阅
——java.awt.event.MouseMotionListener
鼠标移动事件监听器
①
public interface MouseMotionListener extends EventListener{
public void mouseDragged(MouseEvent e);
//处理鼠标拖动事件
public void mouseMoved(MouseEvent e);
//处理鼠标移动事件
}
——java.awt.event.MouseWheelListener
鼠标滚轮监听器
①public interface MouseWheelListener extends EventListener{
public void mouseWheelMoved(MouseWheelEvent e) ;
//处理鼠标滚轮事件
}
②鼠标滚轮事件MouseWheelEvent成员方法
public Point getPoint();
public int getX() ;
public int getY();
public int getWheelRotation() ;//返回滚困旋转格数
返回的数据的正负标示了旋转的方向
六、《》键盘事件处理
包括焦点事件处理和键盘事件处理
——java.awt.event.FocusAdapter
① public void interface FocusListener extends EventListener{
public void focusGained(FocusEvent e) ;
//处理获得键盘焦点事件
public void focusLost(FocusEvent e) ;
//处理失去键盘焦点事件
}
②FocusEvent类的成员方法:
getSource() ;
——java.awt.event.KeyListener
键盘事件监听器
public interface KeyListener extends EventListener{
public void keyTyped(KeyEvent e) ;//处理输入某个字符的事件
publci void keyPresses(KeyEvent e) ;//处理按下某个键的事件
publci void keyReleased(KeyEvente) ;//处理放开某个键的事件
}
②KeyEvent类的成员方法:
public Object getSource() ;
public char getKeyChar() ; //返回键盘上输入的字符