如何从处理程序中引用对象

时间:2011-05-22 17:44:03

标签: java object handlers mouselistener

所以我有一个鼠标监听器,它连接到多个对象,如下所示:

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) {
    }

2 个答案:

答案 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))); 
}