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



假设您有一个项目列表或一个大型组件网格,并且您希望实现某种悬停/翻转机制。要做到这一点,最简单的方法就是向每个组件添加一个mousellistener,并使用mouseEnteredmouseExited方法。另一种方法是根据鼠标的位置确定组件,例如,您有一个JLabels的2D数组,您可以使用如下命令来确定哪个标签位于指针下方:;

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()方法。无需根据点的位置猜测

最新更新