JTable中ListSelectionListener、MousePressed、MouseReleased、MouseClicked事件之间的先后顺序

本文详细解析了在表格中进行单行点击与拖拽选择时,不同类型的事件触发顺序及特性。通过具体示例展示了ListSelection、MousePressed、MouseReleased和MouseClicked等事件的发生顺序,并解释了拖拽过程中ListSelection事件的特殊行为。

当只点击一行(例子中数字为rowIndex)时,事件发生的顺序是ListSelection、MousePressed、ListSelection、MouseReleased、MouseClicked

11:24:48,921 INFO [MyTableDialog] ListSelection: getFirstIndex-0|getLastIndex-13

11:24:48,921 INFO [MyTableDialog] ListSelection: getAnchorSelectionIndex-0

11:24:48,921 INFO [MyTableDialog] ListSelection: getLeadSelectionIndex-0

11:24:48,921 INFO [MyTableDialog] MousePressed:0

11:24:49,031 INFO [MyTableDialog] ListSelection: getFirstIndex-0|getLastIndex-13

11:24:49,031 INFO [MyTableDialog] ListSelection: getAnchorSelectionIndex-0

11:24:49,031 INFO [MyTableDialog] ListSelection: getLeadSelectionIndex-0

11:24:49,031 INFO [MyTableDialog] MouseReleased:0

11:24:49,046 INFO [MyTableDialog] MouseClicked:0

 

 

 

 

如果从一行拖选到另一行时,事件发生的顺序是ListSelection、MousePressed、ListSelection、MouseReleased,没有MouseClicked事件,并且在拖选的过程中,每拖过一行都会触发一次ListSelection事件,该事件保存了上次拖过的行号(getFirstIndex)和当前行号(getLastIndex)

11:26:35,421 INFO [MyTableDialog] ListSelection: getFirstIndex-0|getLastIndex-2

11:26:35,421 INFO [MyTableDialog] ListSelection: getAnchorSelectionIndex-2

11:26:35,421 INFO [MyTableDialog] ListSelection: getLeadSelectionIndex-2

11:26:35,421 INFO [MyTableDialog] MousePressed:2

11:26:35,625 INFO [MyTableDialog] ListSelection: getFirstIndex-2|getLastIndex-3

11:26:35,625 INFO [MyTableDialog] ListSelection: getAnchorSelectionIndex-2

11:26:35,625 INFO [MyTableDialog] ListSelection: getLeadSelectionIndex-3

11:26:35,703 INFO [MyTableDialog] ListSelection: getFirstIndex-3|getLastIndex-4

11:26:35,703 INFO [MyTableDialog] ListSelection: getAnchorSelectionIndex-2

11:26:35,703 INFO [MyTableDialog] ListSelection: getLeadSelectionIndex-4

11:26:35,843 INFO [MyTableDialog] ListSelection: getFirstIndex-4|getLastIndex-5

11:26:35,843 INFO [MyTableDialog] ListSelection: getAnchorSelectionIndex-2

11:26:35,843 INFO [MyTableDialog] ListSelection: getLeadSelectionIndex-5

11:26:36,187 INFO [MyTableDialog] ListSelection: getFirstIndex-0|getLastIndex-5

11:26:36,187 INFO [MyTableDialog] ListSelection: getAnchorSelectionIndex-2

11:26:36,187 INFO [MyTableDialog] ListSelection: getLeadSelectionIndex-5

11:26:36,187 INFO [MyTableDialog] MouseReleased:5

 

 

 

<think>我们根据用户的需求,列举Java GUI中的各种事件类型。注意,用户要求参考之前的回答和引用,但主要需要列举事件类型。根据之前的回答,我们已经提到了一些核心事件,现在需要更全面的列举。 常见的Java GUI事件包括(但不限于): 1. 动作事件(ActionEvent) 2. 选项事件(ItemEvent) 3. 鼠标事件(MouseEvent) 4. 键盘事件(KeyEvent) 5. 窗口事件(WindowEvent) 6. 文本事件(TextEvent) 7. 调整事件(AdjustmentEvent) 8. 焦点事件(FocusEvent) 9. 组件事件(ComponentEvent) 10. 容器事件(ContainerEvent) 11. 列表选择事件(ListSelectionEvent) 12. 菜单事件(MenuEvent) 13. 表格模型事件(TableModelEvent) 14. 树模型事件(TreeModelEvent) 15. 树选择事件(TreeSelectionEvent) 接下来,我们将简要介绍每个事件类型: ### 1. **动作事件 (ActionEvent)** - 触发场景:由动作触发的组件,如按钮点击、菜单项选择、在文本框中按回车键等。 - 监听器接口:`ActionListener` - 关键方法:`actionPerformed(ActionEvent e)` ### 2. **选项事件 (ItemEvent)** - 触发场景:当选择项(如复选框、单选按钮、组合框等)的状态发生变化时触发。 - 监听器接口:`ItemListener` - 关键方法:`itemStateChanged(ItemEvent e)` ### 3. **鼠标事件 (MouseEvent)** - 触发场景:鼠标操作,如点击、按下、释放、进入组件区域、离开组件区域、移动、拖拽等。 - 监听器接口:`MouseListener`(处理点击、进入、退出等)和 `MouseMotionListener`(处理移动和拖拽)。 - 关键方法:`mouseClicked`, `mousePressed`, `mouseReleased`, `mouseEntered`, `mouseExited`(MouseListener);`mouseDragged`, `mouseMoved`(MouseMotionListener)。 ### 4. **键盘事件 (KeyEvent)** - 触发场景:键盘按键被按下、释放或键入时。 - 监听器接口:`KeyListener` - 关键方法:`keyPressed`, `keyReleased`, `keyTyped` ### 5. **窗口事件 (WindowEvent)** - 触发场景:窗口状态改变,如打开、关闭、激活、停用、图标化等。 - 监听器接口:`WindowListener` - 关键方法:`windowOpened`, `windowClosing`, `windowClosed`, `windowIconified`, `windowDeiconified`, `windowActivated`, `windowDeactivated` ### 6. **文本事件 (TextEvent)** - 触发场景:文本组件的值发生变化时(如文本框、文本域)。 - 监听器接口:`TextListener` - 关键方法:`textValueChanged(TextEvent e)` ### 7. **调整事件 (AdjustmentEvent)** - 触发场景:可调整的组件(如滚动条)的值发生变化时。 - 监听器接口:`AdjustmentListener` - 关键方法:`adjustmentValueChanged(AdjustmentEvent e)` ### 8. **焦点事件 (FocusEvent)** - 触发场景:组件获得或失去焦点时。 - 监听器接口:`FocusListener` - 关键方法:`focusGained`, `focusLost` ### 9. **组件事件 (ComponentEvent)** - 触发场景:组件被移动、改变大小、显示或隐藏时。这是所有低级组件事件的根事件。 - 监听器接口:`ComponentListener` - 关键方法:`componentResized`, `componentMoved`, `componentShown`, `componentHidden` ### 10. **容器事件 (ContainerEvent)** - 触发场景:容器中添加或移除组件时。 - 监听器接口:`ContainerListener` - 关键方法:`componentAdded`, `componentRemoved` ### 11. **列表选择事件 (ListSelectionEvent)** - 触发场景:列表或表格中的选择发生变化时(通常与`JList`或`JTable`相关)。 - 监听器接口:`ListSelectionListener` - 关键方法:`valueChanged(ListSelectionEvent e)` ### 12. **菜单事件 (MenuEvent)** - 触发场景:菜单被选择、取消选择、取消时(与`JMenu`相关)。 - 监听器接口:`MenuListener` - 关键方法:`menuSelected`, `menuDeselected`, `menuCanceled` ### 13. **表格模型事件 (TableModelEvent)** - 触发场景:表格模型发生更改时(如数据变化、结构变化)。 - 监听器接口:`TableModelListener` - 关键方法:`tableChanged(TableModelEvent e)` ### 14. **树模型事件 (TreeModelEvent)** - 触发场景:树结构发生更改时(如节点插入、删除、更改)。 - 监听器接口:`TreeModelListener` - 关键方法:`treeNodesChanged`, `treeNodesInserted`, `treeNodesRemoved`, `treeStructureChanged` ### 15. **树选择事件 (TreeSelectionEvent)** - 触发场景:树中选定的节点发生变化时。 - 监听器接口:`TreeSelectionListener` - 关键方法:`valueChanged(TreeSelectionEvent e)` > 注意:上述事件类型涵盖了Java GUI(主要是Swing)中大部分常见事件。在实际开发中,开发者根据组件的类型和需要响应的用户操作选择相应的事件监听器[^1][^2][^3]。 §§相关问题§§ 1. 如何在Java GUI中处理鼠标拖拽事件? 2. 焦点事件(FocusEvent)在表单验证中有什么应用? 3. 如何为Swing表格(JTable)注册表格模型事件监听器? 4. 在Java GUI中,如何区分键盘事件(KeyEvent)中的keyPressed、keyReleased和keyTyped方法? : Java GUI开发:组件、布局与事件处理全解析 : gui编程 java-基本组件案例 [^3]: java gui 总结_java GUI 总结(1) </think> ### Java GUI 事件类型全面列举 以下是 Java GUI 开发中的主要事件类型分类,基于 Swing/AWT 的事件处理模型。事件类型按交互场景划分,每种类型包含对应的监听器接口和典型触发场景[^2]: --- #### 1. **低级输入事件** | 事件类型 | 监听器接口 | 触发场景 | 关键方法 | |-------------------|--------------------|----------------------------------|----------------------------| | **鼠标事件**<br>(`MouseEvent`) | `MouseListener` | 点击、按下、释放、进入/离开组件区域 | `mouseClicked()`<br>`mouseEntered()` | | | `MouseMotionListener` | 移动、拖拽 | `mouseDragged()`<br>`mouseMoved()` | | | `MouseWheelListener` | 滚轮滚动 | `mouseWheelMoved()` | | **键盘事件**<br>(`KeyEvent`) | `KeyListener` | 按键按下/释放、字符输入 | `keyPressed()`<br>`keyTyped()` | --- #### 2. **高级语义事件** | 事件类型 | 监听器接口 | 触发场景 | 关键方法 | |------------------------|----------------------|----------------------------------|----------------------------| | **动作事件**<br>(`ActionEvent`) | `ActionListener` | 按钮点击、菜单选择、文本框回车 | `actionPerformed()` | | **选项事件**<br>(`ItemEvent`) | `ItemListener` | 复选框/单选按钮状态变更 | `itemStateChanged()` | | **文本事件**<br>(`TextEvent`) | `TextListener` | 文本框/文本域内容变化 | `textValueChanged()` | | **调整事件**<br>(`AdjustmentEvent`) | `AdjustmentListener` | 滚动条滑块移动 | `adjustmentValueChanged()` | --- #### 3. **组件状态事件** | 事件类型 | 监听器接口 | 触发场景 | 关键方法 | |--------------------------|----------------------|----------------------------------|----------------------------| | **焦点事件**<br>(`FocusEvent`) | `FocusListener` | 组件获得/失去焦点 | `focusGained()`<br>`focusLost()` | | **窗口事件**<br>(`WindowEvent`) | `WindowListener` | 窗口打开/关闭/激活/最小化 | `windowClosing()`<br>`windowOpened()` | | **组件事件**<br>(`ComponentEvent`) | `ComponentListener` | 组件移动/缩放/显示/隐藏 | `componentResized()`<br>`componentMoved()` | --- #### 4. **容器与模型事件** | 事件类型 | 监听器接口 | 触发场景 | 关键方法 | |------------------------------|------------------------|----------------------------------|----------------------------| | **容器事件**<br>(`ContainerEvent`) | `ContainerListener` | 容器内组件增删 | `componentAdded()`<br>`componentRemoved()` | | **列表选择事件**<br>(`ListSelectionEvent`) | `ListSelectionListener` | 列表项选择变化 | `valueChanged()` | | **树形事件**<br>(`TreeExpansionEvent`等) | `TreeSelectionListener` | 树节点展开/折叠/选择 | `valueChanged()` | | **表格事件**<br>(`TableModelEvent`) | `TableModelListener` | 表格数据/结构变更 | `tableChanged()` | > **事件处理原理**: > Java GUI 采用**委托事件模型**,事件源(如按钮)通过 `addXXXListener()` 注册监听器对象。当事件发生时,JVM 自动创建事件对象并调用监听器的回调方法。例如: > ```java > button.addActionListener(e -> { // Lambda表达式注册 > System.out.println("按钮点击事件触发"); > }); > ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值