这就是我要做的事情。我添加了JScrollPane
JPanel
。我希望鼠标滚轮的每个滚动都将面板滚动到某个组件的位置。
我可以循环浏览每个组件以找到它的位置。我知道如何滚动到该位置。问题是,我无法找到一种只在一次每次鼠标滚动时循环的方法。
这是我尝试过的。我在ChangeListener
的视口中添加了JScrollPane
,即
scrollpane.getViewport().addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
System.out.println(e);
}
});
我为每个鼠标滚轮滚动得到三个控制台ChangeEvent
,这很糟糕(显然)因为我过度滚动,我认为没有办法确定ChangeEvent
的类型是鼠标滚轮滚动,以便每个鼠标滚轮滚动只能获得一个事件。
我尝试的第二件事是AdjustmentListener
,即
scrollpane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {
@Override
public void adjustmentValueChanged(AdjustmentEvent e) {
System.out.println(e);
}
});
同样的问题。每个鼠标滚轮滚动三个控制台AdjustmentEvent
s。无法确定它是否是触发事件的鼠标滚轮(我为这两种类型的事件尝试了一堆不同的getSource()
和getID()
方法,无法做任何事情任何有用的东西)。
所以我问你们,我是否遗漏了一些明显的东西,或者是否会比我想象的单个鼠标滚轮更难?