2016-09-06 34 views
1

一种noob问题,但后来,我是一个noob。我试图实现一种“通用”鼠标监听器。也就是说,当我单击屏幕上的任何对象时,它将运行特定数量的代码。我有下面的当前解决方案,但我想运行的代码对于10个不同的对象是相同的,所以这变得相当乏味。如何实现鼠标听众

 difference2 = new JLabel(new ImageIcon("transparent.png")); 
     difference2.setBounds(645,490,10,10); //left, top, width, height 
     contentPane.add(difference2); 
     difference2.setVisible(true); 
     difference2.addMouseListener(new MouseAdapter() 
      { 
       public void mouseClicked(MouseEvent e) { 
//code 
} 
      }); 

我知道我可以创建一个单独的方法,如下面的

public void mouseClicked(MouseEvent e) { 
     JOptionPane.showMessageDialog(null,"this would be nice"); 
    } 

但我想不出如何建立一个鼠标监听每个对象它。 JOptionPane目前什么都不做。

回答

2

我可能会误解你的问题,但如果你想要在各种对象上使用相同的mouselistener,您可以将侦听器的实例存储在变量中,然后将其添加到您希望添加到的任何gui对象中。

MouseListener ml = new MouseListener() { 
    @Override 
    public void mouseReleased(MouseEvent e) {//code} 

    @Override 
    public void mousePressed(MouseEvent e) {//code} 

    @Override 
    public void mouseExited(MouseEvent e) {//code} 

    @Override 
    public void mouseEntered(MouseEvent e) {//code} 

    @Override 
    public void mouseClicked(MouseEvent e) {//code} 
}; 

JLabel j1 = new JLabel("Label1"); 
j1.addMouseListener(ml); 
JLabel j2 = new JLabel("Label2"); 
j2.addMouseListener(ml); 
+0

是的,几乎是我最终做了什么。谢谢 – Blaine

2

您可以创建扩展MouseAdapter匿名类的实例,并将其分配给您可以(在这种情况下myMouseListener)再用一个变量:

MouseListener myMouseListener = new MouseAdapter() { 
    public void mouseClicked(MouseEvent e) { 
     JOptionPane.showMessageDialog(null,"this would be nice"); 
    } 
}; 

difference2.addMouseListener(myMouseListener); 
aSecondObject.addMouseListener(myMouseListener); 
aThirdObject.addMouseListener(myMouseListener); 
... 
+0

不知道这是一样的我刚刚发现或不...反正,我的解决办法是添加imgName.addMouseListener(本)的解决方案;然后我的方法正常工作 – Blaine

+0

是的,如果您的类扩展MouseAdapter或实现MouseListener,则可以。 –

+0

嗯,是的,这是其他组件 – Blaine