Java教程是针对JDK 8编写的。本页中描述的示例和实践不利用后续版本引入的改进,并且可能使用不再可用的技术。
有关Java SE 9和后续版本中更新的语言功能的摘要,请参阅Java语言变更。
有关所有JDK版本的新功能、增强功能以及已删除或已弃用选项的信息,请参阅JDK发行说明。
鼠标滚轮事件会在鼠标滚轮旋转时通知。有关监听其他鼠标事件(例如点击)的信息,请参见如何编写鼠标监听器。有关监听鼠标拖动事件的信息,请参见如何编写鼠标移动监听器。并非所有的鼠标都有滚轮,在这种情况下,不会生成鼠标滚轮事件。无法通过编程方式检测鼠标是否配备了鼠标滚轮。
或者,使用相应的MouseAdapter
AWT类来创建MouseWheelEvent
并重写特定事件的方法。
通常不需要实现鼠标滚轮监听器,因为鼠标滚轮主要用于滚动。滚动窗格会自动注册鼠标滚轮监听器,以适当地响应鼠标滚轮。
但是,如果要创建一个自定义组件,用于在滚动窗格中使用,可能需要自定义其滚动行为,特别是可能需要设置单位和块增量。例如,对于文本区域,滚动一个单位意味着滚动一行文本。块增量通常滚动一个整个“页面”或视口的大小。有关更多信息,请参见实现一个懂滚动的客户端在如何使用滚动窗格页面中。
要生成鼠标滚轮事件,光标必须位于注册监听鼠标滚轮事件的组件上方。滚动的类型(WHEEL_UNIT_SCROLL
或WHEEL_BLOCK_SCROLL
)取决于平台。鼠标滚轮滚动的量也取决于平台。通过鼠标控制面板可以设置滚动的类型和量。
以下示例演示了鼠标滚轮事件。
对于一个使用单位增量作为鼠标滚轮的系统,MouseWheelEventDemo的输出如下:
javax.swing.JTextArea: 鼠标滚轮向上滚动1个刻度 滚动类型:WHEEL_UNIT_SCROLL 滚动量:每个刻度3个单位增量 需要滚动的单位:每个刻度-3个单位增量 垂直单位增量:16个像素
通过getScrollAmount
方法返回的滚动量表示将要滚动的单位数,并始终为正数。通过getUnitsToScroll
方法返回的滚动单位,在向下滚动时为正数,在向上滚动时为负数。垂直单位的像素数是通过使用getUnitIncrement
方法从垂直滚动条获得的。在上面的示例中,向上滚动鼠标滚轮一个刻度应该导致文本区向上滚动48个像素(3x16)。
对于一个使用块增量进行鼠标滚轮滚动的系统,对于相同的鼠标滚轮移动,输出可能如下所示:
javax.swing.JTextArea: 鼠标滚轮向上滚动1个刻度 滚动类型:WHEEL_BLOCK_SCROLL 垂直块增量:307个像素
垂直块增量是通过使用getBlockIncrement
方法从垂直滚动条获得的。在这种情况下,向上滚动鼠标滚轮一个刻度意味着文本区应该向上滚动307个像素。
在MouseWheelEventDemo.java
文件中找到演示的代码。以下代码片段与鼠标滚轮事件处理相关:
public class MouseWheelEventDemo ... implements MouseWheelListener ... { public MouseWheelEventDemo() { //初始化操作: //在文本区域上注册鼠标滚轮事件监听器。 textArea.addMouseWheelListener(this); ... } public void mouseWheelMoved(MouseWheelEvent e) { String message; int notches = e.getWheelRotation(); if (notches < 0) { message = "鼠标滚轮向上滚动 " + -notches + " 个刻度" + newline; } else { message = "鼠标滚轮向下滚动 " + notches + " 个刻度" + newline; } if (e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) { message += " 滚动类型:WHEEL_UNIT_SCROLL" + newline; message += " 滚动量:" + e.getScrollAmount() + " 个单位增量每个刻度" + newline; message += " 需要滚动的单位:" + e.getUnitsToScroll() + " 个单位增量" + newline; message += " 垂直单位增量:" + scrollPane.getVerticalScrollBar().getUnitIncrement(1) + " 个像素" + newline; } else { //scroll type == MouseWheelEvent.WHEEL_BLOCK_SCROLL message += " 滚动类型:WHEEL_BLOCK_SCROLL" + newline; message += " 垂直块增量:" + scrollPane.getVerticalScrollBar().getBlockIncrement(1) + " 个像素" + newline; } saySomething(message, e); } ... }
虽然MouseWheelListener
只有一个方法,但它有相应的适配器类——MouseAdapter
。这使得应用程序只需要为组件管理鼠标指针的所有类型的事件创建一个适配器类实例。
方法 | 目的 |
---|---|
mouseWheelMoved(MouseWheelEvent) | 当鼠标滚轮被旋转时调用。 |
方法 | 目的 |
---|---|
int getScrollType() | 返回要使用的滚动类型。可能的值是WHEEL_BLOCK_SCROLL 和WHEEL_UNIT_SCROLL ,由本地平台确定。 |
int getWheelRotation() | 返回鼠标滚轮旋转的刻度数。如果鼠标滚轮向用户(向下)旋转,则值为正数。如果鼠标滚轮远离用户(向上)旋转,则值为负数。 |
int getScrollAmount() | 返回每个刻度应该滚动的单位数。这始终是一个正数,仅在滚动类型为MouseWheelEvent.WHEEL_UNIT_SCROLL 时有效。 |
int getUnitsToScroll() | 返回当前事件要滚动的正数或负数单位。只有当滚动类型为MouseWheelEvent.WHEEL_UNIT_SCROLL 时才有效。 |
下表列出了使用鼠标滚轮监听器的示例。
示例 | 描述位置 | 说明 |
---|---|---|
MouseWheelEventDemo |
本节 | 报告所有在文本区域内发生的鼠标滚轮事件,以演示触发鼠标滚轮事件的情况。 |