2016-09-06 81 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