Java:大量的MouseListeners与像素/网格划分相比如何?

标签 java performance swing jlabel mouselistener

例如,假设您有一个项目列表或一个大型组件网格,并且您想要实现某种悬停/滚动机制。执行此操作的简单方法是向每个组件添加一个 MouseListener 并使用 mouseEnteredmouseExited 方法。另一种方法是根据鼠标的位置确定组件,例如,您有一个 JLabel 的二维数组,您可以使用类似以下内容来确定哪个标签位于指针下方:;

private void setRolloverIndices(Point p){
   this.rolloverRow = p.y / this.labelHeight;
   this.rolloverCol = p.x / this.labelWidth;
}

private JLabel getRolloverLabel(){
   // assume safe values
   return labels[rolloverRow][rolloverCol];
}

是否值得为像素/网格计算而烦恼,或者监听器通常是否足够高效以处理许多组件?

最佳答案

同一个监听器可以添加到多个组件,并且可以使用事件的 getSource() 来触发事件的组件。或 getComponent()方法。无需根据点位置进行猜测。

关于Java:大量的MouseListeners与像素/网格划分相比如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8543677/

相关文章:

java - Google map api 获取致命异常 : java. lang.NullPointerException:尝试获取空数组的长度

c++ - 为什么我的 swap<string,string> 比 std 版本慢得多?

带有 Eclipse 的 Java - 丢失的设计页面

java - java swing中模态窗口之上的模态窗口?

performance - 什么是搜索数组 N 和 M 的好算法,以便找到 N 中也存在于 M 中的元素?

Java - 面板与框架大小相同

java - 如何通过 Mockito 模拟无法访问的第三方类属性

java - Webdriver - 页面对象模型和 Maven 找不到类

java - spring + hibernate配置错误?类路径资源 [spring.xml] 中的 XML 文档无效

mysql - 远程 MySQL 连接速度慢