1. 窗体事件
1.1 说明
对窗体进行操作时,例如窗体的打开,关闭,激活,停用等,这些动作都属于窗体事件。一般通过addWindowListener绑定窗体事件。可以通过 WindowListener接口和WindowAdapter抽象类实现窗口监听,WindowAdapter可只重写需要的监听方法。监听的事件源为窗口对象。
类外还有其他的窗体事件WindowFocusListener(焦点),WindowStateListener(状态),可用于窗口的焦点获取与失去、状态改变的事件监听。
1.2 事件监听方法
方法 | 描述 |
windowOpened(WindowEvent e) | 在第一次打开窗口可见时调用。 |
windowClosing(WindowEvent e) | 当从窗口的系统菜单关闭窗口时调用。 |
windowClosed(WindowEvent e) | 在窗口上调用dispose而关闭窗口时调用。 |
windowIconified(WindowEvent e) | 当窗口从正常状态更改为最小化状态时调用。 |
windowDeiconified(WindowEvent e) | 当窗口从最小化状态更改为正常状态时调用。 |
windowActivated(WindowEvent e) | 当窗口被设置为活动窗口时调用。 |
windowDeactivated(WindowEvent e) | 当窗口不再是活动窗口时调用。 |
1.3 事件(WindowEvent)常用方法
方法 | 描述 |
paramString() | 返回标识此事件的参数字符串。此方法对于事件日志记录和调试非常有用。 |
getWindow() | 返回事件的发起者。 |
getOppositeWindow() | 返回与此焦点或激活更改相关的其他窗口。 |
getOldState() | 返回窗口的前一个状态。 |
getNewState() | 返回窗口的新状态。 |
1.4 示例
//窗体注册监听
jFrame.addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) {
System.out.println("窗体打开事件");
}
@Override
public void windowIconified(WindowEvent e) {
System.out.println("窗体图标化事件/最小化");
}
@Override
public void windowDeiconified(WindowEvent e) {
System.out.println("窗体取消图标化事件/取消最小化");
}
@Override
public void windowDeactivated(WindowEvent e) {
System.out.println("窗体停用事件");
}
@Override
public void windowClosing(WindowEvent e) {
System.out.println("窗体正在关闭事件");
}
@Override
public void windowClosed(WindowEvent e) {
System.out.println("窗体关闭事件");
//被执行,看不到效果
}
@Override
public void windowActivated(WindowEvent e) {
System.out.println("窗体激活事件");
}
});
//窗体注册监听,可使用 WindowAdapter 只重写需要的监听方法
jFrame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.out.println("窗体正在关闭事件");
}
});
jFrame.addWindowFocusListener(new WindowFocusListener() {
@Override
public void windowGainedFocus(WindowEvent e) {
System.out.println("窗口获取到焦点时调用" );
}
@Override
public void windowLostFocus(WindowEvent e) {
System.out.println("窗口失去到焦点时调用" );
}
});
jFrame.addWindowStateListener(e -> {
System.out.println("窗口状态改变 " + e);
});
2. 鼠标事件
2.1 说明
通过addMouseListener添加对鼠标单击、按下与释放、移入与移出事件的监听。可以通过 MouseListener接口和MouseAdapter抽象类实现鼠标监听,MouseAdapter可只重写需要的监听方法。监听的事件源为所有组件对象。
通过addMouseMotionListener添加对鼠标的移动、拖拽事件监听。可以通过 MouseMotionListener接口和MouseMotionAdapter抽象类实现鼠标监听,MouseMotionAdapter可只重写需要的监听方法。监听的事件源为所有组件对象。
通过addMouseWheelListener添加对鼠标的滚轮进行事件监听。可以通过 MouseWheelListener接口和MouseWheelAdapter抽象类实现鼠标监听,MouseWheelAdapter可只重写需要的监听方法。监听的事件源为所有组件对象。
2.2 事件监听方法
方法 | 描述 |
MouseListener | |
mouseClicked(MouseEvent e) | 当在组件上单击(按下并释放)鼠标按钮时调用。 |
mousePressed(MouseEvent e) | 当在组件上按下鼠标按钮时调用。 |
mouseReleased(MouseEvent e) | 当组件上的鼠标按钮被释放时调用。 |
mouseEntered(MouseEvent e) | 当鼠标进入组件时调用。 |
mouseExited(MouseEvent e) | 当鼠标离开组件时调用。 |
MouseMotionListener | |
mouseDragged(MouseEvent e) | 当鼠标拖拽时调用。 |
mouseMoved(MouseEvent e) | 当鼠标移动时调用。 |
MouseWheelListener | |
mouseWheelMoved(MouseWheelEvent e) | 当鼠标滚动滚动时调用。 |
2.3 事件常用方法
方法 | 描述 |
MouseEvent | |
paramString() | 返回标识此事件的参数字符串。此方法对于事件日志记录和调试非常有用。 |
getSource() | 返回事件的发起者对象。 |
getLocationOnScreen() | 返回事件的绝对x、y位置。 |
getXOnScreen() | 返回事件的绝对水平x位置。 |
getYOnScreen() | 返回事件的绝对垂直y位置。 |
getModifiersEx() | 获取修饰符 |
getX() | 返回事件相对于源组件的水平x位置。 |
getY() | 返回事件相对于源组件的垂直位置。 |
getPoint() | 返回事件相对于源组件的x、y位置。 |
translatePoint(int x, int y) | 通过添加指定的x(水平)和y(垂直)偏移量,将事件坐标转换为新位置。 |
getClickCount() | 返回与此事件关联的鼠标单击次数。 |
getButton() | 返回哪个(如果有的话)鼠标按钮改变了状态。 1-左键、2-滚轮、3-右键 |
isPopupTrigger() | 返回此鼠标事件是否是平台的弹出式菜单触发事件。 |
getMouseModifiersText(int modifiers) | 返回一个String实例,描述在事件发生期间按下的修饰键和鼠标按钮,如“Shift”或“Ctrl+Shift”。 |
MouseWheelEvent(MouseEvent的子类) | |
getScrollType() | 返回响应此事件时应发生的滚动类型。有如下值:MouseWheelEvent.WHEEL_UNIT_SCROLL 以“单位”表示滚动的常量 MouseWheelEvent.WHEEL_BLOCK_SCROLL 按“块”滚动的常量 |
getScrollAmount() | 返回每次单击鼠标滚轮旋转时应该滚动的单位数。 |
getWheelRotation() | 以整数形式返回鼠标滚轮旋转的“点击”次数。 |
getPreciseWheelRotation() | 以双精度返回鼠标滚轮旋转的“点击”次数。 |
getUnitsToScroll() | 返回要滚动的单位数。 |
2.4 示例
jButton.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("鼠标释放事件");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("鼠标被按下事件");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("鼠标移出按钮区域事件");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("鼠标进入按钮区域事件");
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("鼠标完成点击事件");
}
});
jButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("鼠标完成点击事件");
}
});
JPanel jPanel =new JPanel();
jPanel.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent e) {
System.out.println("鼠标拖到时调用");
}
@Override
public void mouseMoved(MouseEvent e) {
System.out.println("鼠标移动时调用");
}
});
JPanel jPanel =new JPanel();
jPanel.addMouseWheelListener(e ->{
System.out.println("滑动滚轮时调用");
} );
3. 键盘事件
3.1 说明
对键盘输入、按下与释放事件进行监听。一般通过addKeyListener绑定键盘事件。可以通过 KeyListener接口和KeyAdapter抽象类实现键盘监听,KeyAdapter可只重写需要的监听方法。监听的事件源为所有能接受焦点的组件对象。
3.2 事件监听方法
方法 | 描述 |
keyTyped(KeyEvent e) | 当键输入时调用。 |
keyPressed(KeyEvent e) | 当键被按下时调用。 |
keyReleased(KeyEvent e) | 当键被释放时调用。 |
3.3 事件(KeyEvent)常用方法
方法 | 描述 |
paramString() | 返回标识此事件的参数字符串。此方法对于事件日志记录和调试非常有用。 |
getSource() | 返回事件的发起者对象。 |
getKeyCode() | 返回与此事件中的键相关联的整数keyCode。 |
getKeyChar() | 返回与此事件中的键相关联的字符。 |
getKeyLocation() | 返回引发此键事件的键的位置。 |
getKeyText(int keyCode) | 返回描述keyCode的字符串, |
getKeyModifiersText(int modifiers) | 返回描述修饰键的字符串,如“Shift”或“Ctrl+Shift”。 |
isActionKey() | 返回此事件中的键是否为“操作”键。 |
3.4 示例
jTextField.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
System.out.println("当键输入时调用。");
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println("当键被按下时调用。");
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("当键被释放时调用。");
}
});
jTextField.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
System.out.println("当键输入时调用。");
}
});
4. 焦点事件
4.1 说明
对组件获取与失去事件进行监听。一般通过addFocusListener绑定焦点事件。可以通过 FocusListener接口和FocusAdapter抽象类实现焦点监听,FocusAdapter可只重写需要的监听方法。监听的事件源为所有能接受焦点的组件对象。
4.2 事件监听方法
方法 | 描述 |
focusGained(FocusEvent e) | 当组件获取到焦点时调用 |
focusLost(FocusEvent e) | 当组件失去焦点时调用 |
4.3 事件(FocusEvent )常用方法
方法 | 描述 |
paramString() | 返回标识此事件的参数字符串。此方法对于事件日志记录和调试非常有用。 |
getSource() | 返回事件的发起者对象。 |
isTemporary() | 判断焦点是否是临时的,变化是暂时的,则为True |
getOppositeComponent() | 返回与此焦点更改相关的其他组件。 |
4.4 示例
jTextField.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
System.out.println("获取焦点");
}
@Override
public void focusLost(FocusEvent e) {
System.out.println("失去焦点");
}
});
jTextField.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
System.out.println("获取焦点");
}
});
5. 组件事件
4.1 说明
对组件大小、位置、显隐状态改变事件进行监听。一般通过addComponentListener绑定组件事件。可以通过 ComponentListener接口和ComponentAdapter抽象类实现组件监听,ComponentAdapter可只重写需要的监听方法。监听的事件源为所有组件对象。
4.2 事件监听方法
方法 | 描述 |
componentResized(ComponentEvent e) | 当组件大小调整时调用。 |
componentMoved(ComponentEvent e) | 当组件位置调整时调用。 |
componentShown(ComponentEvent e) | 当组件显示时调用。 |
componentHidden(ComponentEvent e) | 当组件隐藏时调用。 |
4.3 事件(ComponentEvent )常用方法
方法 | 描述 |
paramString() | 返回标识此事件的参数字符串。此方法对于事件日志记录和调试非常有用。 |
getSource() | 返回事件的发起者对象。 |
4.4 示例
jTextField.addComponentListener(new ComponentListener() {
@Override
public void componentResized(ComponentEvent e) {
System.out.println("组件大小调整时调用");
}
@Override
public void componentMoved(ComponentEvent e) {
System.out.println("组件位置调整时调用");
}
@Override
public void componentShown(ComponentEvent e) {
System.out.println("组件显示时调用");
}
@Override
public void componentHidden(ComponentEvent e) {
System.out.println("组件隐藏时调用");
}
});
jTextField.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
System.out.println("组件大小调整时调用");
}
});
6. 容器事件
6.1 说明
对容器中添加或删除组件的事件进行监听。一般通过addContainerListener绑定容器事件。可以通过 ContainerListener接口和ContainerAdapter抽象类实现容器监听,ContainerAdapter可只重写需要的监听方法。监听的事件源为所有容器对象。
6.2 事件监听方法
方法 | 描述 |
componentAdded(ContainerEvent e) | 当添加组件时调用。 |
componentRemoved(ContainerEvent e) | 当删除组件时调用 |
6.3 事件(ContainerEvent )常用方法
方法 | 描述 |
paramString() | 返回标识此事件的参数字符串。此方法对于事件日志记录和调试非常有用。 |
getSource() | 返回事件的发起者对象。 |
6.4 示例
jPanel.addContainerListener(new ContainerListener() {
@Override
public void componentAdded(ContainerEvent e) {
System.out.println("添加组件时调用");
}
@Override
public void componentRemoved(ContainerEvent e) {
System.out.println("删除组件时调用");
}
});
jPanel.addContainerListener(new ContainerAdapter() {
@Override
public void componentAdded(ContainerEvent e) {
System.out.println("添加组件时调用");
}
});
7. 动作事件
7.1 说明
对点击按钮或菜单等事件进行监听。一般通过addActionListener绑定动作事件。可以通过 ActionListener接口实现动作监听,只有一个actionPerformed方法,可使用Lambda 表达式。监听的事件源为按钮、列表、菜单项等对象。
7.2 事件(ActionEvent)常用方法
方法 | 描述 |
paramString() | 返回标识此事件的参数字符串。此方法对于事件日志记录和调试非常有用。 |
getSource() | 返回事件的发起者对象。 |
getActionCommand() | 返回与此操作关联的命令字符串。 |
getWhen() | 返回此事件发生时间的时间戳。 |
getModifiers() | 返回在此操作事件期间按下的修饰符键。 |
7.3 示例
jButton.addActionListener(e -> {
System.out.println("点击按钮调用");
});
8. 调节事件
8.1 说明
对滚动条调节的事件进行监听。一般通过addAdjustmentListener绑定调节事件。可以通过 AdjustmentListener接口实现调节监听,只有一个adjustmentValueChanged方法,可使用Lambda 表达式。监听的事件源为滚动条对象。
8.2 事件(AdjustmentEvent)常用方法
方法 | 描述 |
paramString() | 返回标识此事件的参数字符串。此方法对于事件日志记录和调试非常有用。 |
getAdjustable() | 返回事件起源的可调对象。 |
getValue() | 返回调整事件中的当前值。 |
getAdjustmentType() | 返回导致值更改事件的调整类型。有如下值: AdjustmentEvent.UNIT_INCREMENT 1 单位增量调节类型。 |
getValueIsAdjusting() | 是否是多个调整事件之一。 |
8.3 示例
JScrollBar jScrollBar = new JScrollBar();
jScrollBar.addAdjustmentListener(e -> {
System.out.println("调节滚动条时调用");
});
10. 选项事件
10.1 说明
对点复选框及等事件进行监听。一般通过addItemListener绑定选项事件。可以通过 ItemListener接口实现选项监听,只有一个itemStateChanged方法,可使用Lambda 表达式。监听的事件源为单选框、复选框、列表、菜单项等对象。
10.2 事件(ItemEvent)常用方法
方法 | 描述 |
paramString() | 返回标识此事件的参数字符串。此方法对于事件日志记录和调试非常有用。 |
getItemSelectable() | 返回事件的发起者。 |
getItem() | 返回受事件影响的项。 |
getStateChange() | 返回状态更改的类型(选中或取消选中)。 |
10.3 示例
JCheckBox jCheckBox = new JCheckBox("选项");
jCheckBox.addItemListener(e -> {
System.out.println("切换选项时调用");
});
JRadioButton jRadioButton = new JRadioButton("选项");
jRadioButton.addItemListener(e -> {
System.out.println("切换选项时调用");
});
JComboBox jComboBox=new JComboBox(new Vector<>(Arrays.asList("A","B")));
jComboBox.addItemListener(e -> {
System.out.println("切换选项时调用");
});
List jList =new List(5);
jList.addItemListener(e -> {
System.out.println("切换选项时调用");
});
JMenuItem jMenuItem=new JMenuItem("菜单项");
jMenuItem.addItemListener(e -> {
System.out.println("切换选项时调用");
});
11. 文本事件
11.1 说明
对文本框、文本域修改事件进行监听。一般通过addTextListener绑定文本事件。可以通过 TextListener接口实现文本监听,只有一个textValueChanged方法,可使用Lambda 表达式。监听的事件源为文本框、文本域等对象。
11.2 事件(TextEvent)常用方法
方法 | 描述 |
paramString() | 返回标识此事件的参数字符串。此方法对于事件日志记录和调试非常有用。 |
11.3 示例
TextField textField=new TextField();
textField.addTextListener(e -> {
System.out.println("文本修改");
});
TextArea textArea=new TextArea();
textArea.addTextListener(e -> {
System.out.println("文本修改");
});
12. 层次结构事件
12.1 说明
包含层次结构事件与层次结构边框事件,可通过addHierarchyListener和addHierarchyBoundsListener绑定事件。监听的事件源为组件对象。
12.2 事件(HierarchyEvent)常用方法
方法 | 描述 |
paramString() | 返回标识此事件的参数字符串。此方法对于事件日志记录和调试非常有用。 |
getComponent() | 返回事件的发起者。 |
getChanged() | 返回已更改的层次结构顶部的组件。 |
getChangedParent() | 返回getChanged()返回的组件的父组件。 |
getChangeFlags() | HIERARCHY_CHANGED类型,如果不是HIERARCHY_CHANGED事件,则为0 |
12.3 示例
JButton jButton = new JButton("点击");
jButton.addHierarchyListener(e -> {
System.out.println("添加指定的层次结构侦听器。 ");
});
jButton.addHierarchyBoundsListener(new HierarchyBoundsListener() {
@Override
public void ancestorMoved(HierarchyEvent e) {
System.out.println("移动层次结构时调用。");
}
@Override
public void ancestorResized(HierarchyEvent e) {
System.out.println("改变层次结构大小时调用。 ");
}
});
13. 值改变事件
13.1 说明
主要用于监听组件值改变的事件,可通过addChangeListener绑定事件。监听的事件源为组件对象。
13.2 事件(ChangeEvent)常用方法
方法 | 描述 |
toString() | 返回标识此事件的参数字符串。此方法对于事件日志记录和调试非常有用。 |
getSource() | 返回事件的发起者对象。 |
13.3 示例
JProgressBar jProgressBar = new JProgressBar(0, 100); //进度条
jProgressBar.addChangeListener(e -> {
System.out.println("进度条值改变时调用");
});
14. 输入法事件
14.1 说明
主要用于监听输入法的事件,可通过addInputMethodListener绑定事件。监听的事件源为文本组件对象。
14.2 事件(InputMethodEvent)常用方法
方法 | 描述 |
paramString() | 返回标识此事件的参数字符串。此方法对于事件日志记录和调试非常有用。 |
getText() | 获取已提交和已组合的文本。 |
getCommittedCharacterCount() | 获取文本中已提交的字符数。 |
getCaret() | 获取插入符号。 |
getVisiblePosition() | 获取最重要的可见位置。 |
consume() | 使用此事件,使其不会被发起该事件的源以默认方式处理。 |
isConsumed() | 返回此事件是否已被消耗。 |
getWhen() | 返回此事件发生时间的时间戳。 |
14.3 示例
JTextField jTextField=new JTextField();
jTextField.addInputMethodListener(new InputMethodListener() {
@Override
public void inputMethodTextChanged(InputMethodEvent event) {
System.out.println("当通过输入法输入的文本发生更改时调用。" + event);
}
@Override
public void caretPositionChanged(InputMethodEvent event) {
System.out.println("当组合文本中的插入符号发生更改时调用。" + event);
}
});
15. 插入事件
15.1 说明
主要用于监听光标插入符号的事件,可通过addCaretListener绑定事件。监听的事件源为文本组件对象。
15.2 事件(CaretEvent)常用方法
方法 | 描述 |
getSource() | 返回事件的发起者对象。 |
getDot() | 获取插入符号的位置,也就是光标位置或选中文本的开头位置。 |
getMark() | 获取选择文本的另一端的位置。如果没有选择,这将与Dot相同。 |
15.3 示例
JTextField jTextField=new JTextField();
jTextField.setPreferredSize(new Dimension(200,30));
jTextField.addCaretListener(e->{
System.out.println("光标位置改变或选中文本时调用");
});
16. 属性事件
16.1 说明
主要用于监听组件属性变化事件,可通过addPropertyChangeListener绑定事件。监听的事件源为容器对象。
还可以通过addVetoableChangeListener绑定约束属性监听器。
16.2 事件(PropertyChangeEvent)常用方法
方法 | 描述 |
getPropertyName() | 获取已更改的属性的名称。 |
getNewValue() | 获取属性的新值。 |
getOldValue() | 获取属性的原值。 |
setPropagationId(Object propagationId) getPropagationId() | 获取或设置事件的propagationId对象。 |
16.3 示例
JButton jButton = new JButton("点击");
//监听所有按钮组件的属性
jButton.addPropertyChangeListener(e->{
System.out.println(e);
});
//监听按钮background属性
jButton.addPropertyChangeListener("background",e->{
System.out.println(e);
});
17. 祖先事件
17.1 说明
主要用于监听组件在祖先容器里的添加、移除、移动等变化事件,可通过addAncestorListener绑定事件。监听的事件源为组件对象。
17.2 事件(AncestorEvent)常用方法
方法 | 描述 |
getAncestor() | 返回事件实际发生的祖先。 |
getAncestorParent() | 返回实际发生事件的祖先的父节点。 |
getComponent() | 返回已添加侦听器的组件。 |
17.3 示例
JButton jButton = new JButton("点击");
jButton.addAncestorListener(new AncestorListener() {
@Override
public void ancestorAdded(AncestorEvent event) {
System.out.println("添加组件时调用。");
}
@Override
public void ancestorRemoved(AncestorEvent event) {
System.out.println("移除组件时调用。");
}
@Override
public void ancestorMoved(AncestorEvent event) {
System.out.println("移动组件时调用。");
}
});