如何编写鼠标轮侦听器
鼠标滚轮事件通知鼠标滚轮何时旋转。有关收听其他鼠标事件(例如单击)的信息,请参阅如何编写鼠标侦听器。有关侦听鼠标拖动事件的信息,请参见如何编写鼠标动作侦听器。并非所有鼠标都具有滚轮,在这种情况下,永远不会产生鼠标滚轮事件。无法以编程方式检测鼠标是否配备了鼠标滚轮。
或者,使用实现MouseWheelListener
interface的相应的MouseAdapter AWT 类创建MouseWheelEvent
并覆盖特定事件的方法。
通常不需要实现鼠标滚轮监听器,因为鼠标滚轮主要用于滚动。滚动窗格会自动注册对鼠标滚轮做出适当反应的鼠标滚轮侦听器。
但是,要创建在滚动窗格内使用的自定义组件,您可能需要自定义其滚动行为-特别是您可能需要设置单位和块增量。例如,对于文本区域,滚动一个单位表示滚动一行文本。块增量通常滚动整个“页面”或视口的大小。有关更多信息,请参见如何使用滚动窗格页中的实现精通滚动 Client 端。
要生成鼠标滚轮事件,光标必须位于注册用于侦听鼠标滚轮事件的组件上方。发生的滚动类型WHEEL_UNIT_SCROLL
或WHEEL_BLOCK_SCROLL
取决于平台。鼠标滚轮滚动的数量也取决于平台。可以通过平台的鼠标控制面板设置滚动的类型和数量。
以下示例演示了鼠标滚轮事件。
Try this:
-
单击启动按钮以使用Java™Web 开始(下载 JDK 7 或更高版本)运行 MouseWheelEventDemo。另外,要自己编译和运行示例,请查阅example index。
-
将光标移到文本区域上。
-
旋转鼠标滚轮远离您。您将在向上方向上看到一个或多个鼠标滚轮事件。
-
沿相反方向旋转鼠标滚轮。您会在* down *方向上看到鼠标滚轮事件。
-
try在系统的鼠标控制面板上更改鼠标滚轮的滚动行为,以查看输出的变化。您无需重新启动演示即可看到更改生效。
对于使用鼠标滚轮单位增量的系统,MouseWheelEventDemo 的输出可能如下所示:
javax.swing.JTextArea: Mouse wheel moved UP 1 notch(es)
Scroll type: WHEEL_UNIT_SCROLL
Scroll amount: 3 unit increments per notch
Units to scroll: -3 unit increments
Vertical unit increment: 16 pixels
getScrollAmount
方法返回的滚动量表示要滚动多少个单位,并且始终显示一个正数。 getUnitsToScroll
方法返回的滚动单位在向下滚动时为正,在向上滚动时为负。垂直单位的像素数是使用getUnitIncrement
方法从垂直滚动条获得的。在前面的示例中,向上滚动鼠标滚轮一个凹口将导致文本区域向上滚动 48 个像素(3x16)。
对于使用块增量进行鼠标滚轮滚动的系统,对于鼠标滚轮的相同移动,输出可能如下所示:
javax.swing.JTextArea: Mouse wheel moved UP 1 notch(es)
Scroll type: WHEEL_BLOCK_SCROLL
Vertical block increment: 307 pixels
垂直块增量是使用getBlockIncrement
方法从垂直滚动条获得的。在这种情况下,将鼠标滚轮向上滚动一个缺口意味着文本区域应向上滚动 307 个像素。
在MouseWheelEventDemo.java文件中找到演示的代码。以下代码段与鼠标滚轮事件处理有关:
public class MouseWheelEventDemo ... implements MouseWheelListener ... {
public MouseWheelEventDemo() {
//where initialization occurs:
//Register for mouse-wheel events on the text area.
textArea.addMouseWheelListener(this);
...
}
public void mouseWheelMoved(MouseWheelEvent e) {
String message;
int notches = e.getWheelRotation();
if (notches < 0) {
message = "Mouse wheel moved UP "
+ -notches + " notch(es)" + newline;
} else {
message = "Mouse wheel moved DOWN "
+ notches + " notch(es)" + newline;
}
if (e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) {
message += " Scroll type: WHEEL_UNIT_SCROLL" + newline;
message += " Scroll amount: " + e.getScrollAmount()
+ " unit increments per notch" + newline;
message += " Units to scroll: " + e.getUnitsToScroll()
+ " unit increments" + newline;
message += " Vertical unit increment: "
+ scrollPane.getVerticalScrollBar().getUnitIncrement(1)
+ " pixels" + newline;
} else { //scroll type == MouseWheelEvent.WHEEL_BLOCK_SCROLL
message += " Scroll type: WHEEL_BLOCK_SCROLL" + newline;
message += " Vertical block increment: "
+ scrollPane.getVerticalScrollBar().getBlockIncrement(1)
+ " pixels" + newline;
}
saySomething(message, e);
}
...
}
鼠标滚轮监听器 API
尽管MouseWheelListener
只有一种方法,但它具有相应的适配器类MouseAdapter
。此功能使应用程序仅具有一个适配器类实例即可对该组件进行 管理,以通过鼠标指针 管理 所有类型的事件.
Method | Purpose |
---|---|
mouseWheelMoved(MouseWheelEvent) | 旋转鼠标滚轮时调用。 |
Method | Purpose |
---|---|
int getScrollType() | 返回要使用的滚动类型。可能的值为WHEEL_BLOCK_SCROLL 和WHEEL_UNIT_SCROLL ,由本地平台确定。 |
int getWheelRotation() | 返回鼠标滚轮旋转的凹口数。如果鼠标滚轮向用户方向旋转(向下),则该值为正。如果鼠标滚轮向远离用户的方向旋转(向上),则该值为负。 |
int getScrollAmount() | 返回每个槽口应滚动的单位数。这始终是一个正数,并且仅在滚动类型为MouseWheelEvent.WHEEL_UNIT_SCROLL 时有效。 |
int getUnitsToScroll() | 返回正或负单位以滚动当前事件。仅在滚动类型为MouseWheelEvent.WHEEL_UNIT_SCROLL 时有效。 |
使用鼠标滚轮监听器的示例
下表列出了使用鼠标滚轮侦听器的示例。
Example | Where Described | Notes |
---|---|---|
MouseWheelEventDemo | This section | 报告在文本区域内发生的所有鼠标滚轮事件,以演示触发鼠标滚轮事件的情况。 |