2011-05-22 53 views
1

所以我有一个连接到多个对象作为这样一个鼠标监听器内:如何引用一个对象从处理器

for (int i = 0; i < Grids.size(); i++) { 
    Grids.get(i).addMouseListener(new GameMouseListener()); 
    } 

现在我的问题是,我需要知道哪些对象的激活处理程序

显然这不会工作,因为VAR“我”没有在类中定义,并只在以前的循环中使用。 如何知道如何使用处理程序哪些特定对象已被点击。

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

回答

1

您可以使用e.getSource()来获取事件的来源。

另外,如果可能的话,请考虑使用ActionListener(如果用户可以使用键盘进行选择)。

还有一件事 - 它的听众是通用的,你可能会为每个组件创建它的只有一个实例,而不是新的实例:

GameMouseListener listener = new GameMouseListener(); 
for (int i = 0; i < Grids.size(); i++) { 
    Grids.get(i).addMouseListener(listener); 
} 
+0

会尝试。感谢:) – 2011-05-22 17:47:55

+0

是的工作,我只是转换了e.getsource();反对适当的一个,它完美地运作 – 2011-05-22 17:56:48

+0

@Epicmaster - 伟大的听到! – MByD 2011-05-22 18:11:36

0

你可以通过在物体上在构造函数中,你是无论如何都要为每个对象制作一个新对象(或者在您只创建一个听众时使用e.getSource()

for (int i = 0; i < Grids.size(); i++) { 
    Grids.get(i).addMouseListener(new GameMouseListener(Grids.get(i))); 
}