目前,我遇到了Java - Swing中mouseMoved事件的问题。简单地说,我有一个JPanel,并且我将MouseMotionListener附加到它,以便在运行时隐藏或显示JscrollPane:
myPanel.addMouseMotionListener(new MousePresenter());我有自己的实现MouseMotionListener接口的类:
public class MousePresenter implements MouseMotionListener {
public void mouseMoved(MouseEvent e) {
int x = e.getX();
int y = e.getY();
if (x>20 && x<200) {
hideScrollBar();
}
else {
showScrollBar();
}
}
} 问题是mouseMoved事件不够频繁地触发。在使用MouseMotionListener时,有没有相关的解决方案?
谢谢您抽时间见我。
发布于 2012-09-27 17:55:53
鼠标移动事件天生就很慢,因为它在每个像素变化时都会触发。
要优化整个问题,唯一可以做的就是优化回调处理程序中所做的事情。在你的情况下,你确实有
if (something)
doA();
else
doB();这意味着,在任何情况下,您都试图显示或隐藏滚动条,即使滚动条已经显示或隐藏。您可以做的是:
if (scrollBarIsVisible && x>20 && x<200) {
hideScrollBar();
scrollBarIsVisible = false;
}
else if (!scrollBarIsVisible) {
showScrollBar();
scrollBarIsVisible = true;
}这样,当从内部边界切换到外部边界时,您只需修改元素的可见性(这可能是一项繁重的操作,因为它可能需要重新布局内容)。这应该会大大降低计算运算量。
https://stackoverflow.com/questions/12618594
复制相似问题