假设您有一个项目列表或一个大型组件网格,并且您希望实现某种悬停/翻转机制。要做到这一点,最简单的方法就是向每个组件添加一个mousellistener,并使用mouseEntered
和mouseExited
方法。另一种方法是根据鼠标的位置确定组件,例如,您有一个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()
方法。无需根据点的位置猜测