例如,假设您有一个项目列表或一个大型组件网格,并且您想要实现某种悬停/滚动机制。执行此操作的简单方法是向每个组件添加一个 MouseListener 并使用 mouseEntered
和 mouseExited
方法。另一种方法是根据鼠标的位置确定组件,例如,您有一个 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/