所以我有一个鼠标监听器,它连接到多个对象,如下所示:
for (int i = 0; i < Grids.size(); i++) {
Grids.get(i).addMouseListener(new GameMouseListener());
}
现在我遇到的问题是我需要知道哪些对象激活了处理程序
显然这不会起作用,因为var“i”没有在类中定义,只用于前面的for循环。 我怎么知道使用Handler特定对象被点击了。
public class GameMouseListener implements MouseListener {
@Override
public void mouseClicked(MouseEvent e) {
if (Grid.get(i).isSelected()) {
Grid.get(i).unselected();
} else {
Grid.get(i).selected();
}
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
答案 0 :(得分:1)
您可以使用e.getSource()
获取活动来源。
另外,请考虑尽可能使用ActionListener
(如果用户可能选择使用键盘)。
还有一件事 - 监听器是通用的,你可能只创建一个实例而不是每个组件的新实例:
GameMouseListener listener = new GameMouseListener();
for (int i = 0; i < Grids.size(); i++) {
Grids.get(i).addMouseListener(listener);
}
答案 1 :(得分:0)
你可以在构造函数中传递对象,因为你正在为每个对象创建一个新对象(或者当你只创建一个监听器时使用e.getSource()
)
for (int i = 0; i < Grids.size(); i++) {
Grids.get(i).addMouseListener(new GameMouseListener( Grids.get(i)));
}