2012-02-07 95 views
1

我有兩個JButton和一個JPanel。 如果註冊鼠標偵聽器的代碼如下所示,我怎樣才能刪除JPanel上的已註冊的mouselistener?在一個JButton的點擊上,這個mouselistener被註冊了,現在點擊其他JButton我想刪除註冊的鼠標監聽器。 如果我在第二JButton的點擊上寫這樣的東西。如何取消註冊JPanel的鼠標偵聽器

  pnlImagePanel.removeMouseListener(); 

但在上面的行的removeMouseListener()方法需要監聽器對象,我不具有已實現了鼠標監聽器類。我已經完成了以下類型的註冊監聽器的編碼,並將代碼自行編寫。

所以請引導我的朋友我怎麼才能取消註冊mouselistener。

這裏是代碼的一部分。

  import java.awt.event.MouseAdapter; 
      import java.awt.event.MouseEvent; 
      import java.awt.event.MouseMotionAdapter; 

      Class abc{ 

        pnlImagePanel.addMouseListener(new MouseAdapter() { 
      public void mousePressed(MouseEvent evt) { 
       System.out.println("Mouse Pressed"); 
       startingX = evt.getX(); 
       startingY = evt.getY(); 
       System.out.println(Startingx); 
       System.out.println(StartingY); 
      } 
     }); 

      } 

謝謝!

回答

2

而不是創建匿名MouseListener,創建一個類的對象實現MouseListener類,然後將其添加到JPanel收聽。在刪除時,將創建的MouseListener對象傳遞給removeMouseListener()函數。

+0

謝謝!期待你的答覆。我有同樣的想法,但實際上我想知道如何註銷以上述方式註冊的mouselistener,因爲我有大代碼。通過編寫另一個類來管理代碼將非常繁瑣。所以把寫另一個類的實現mouselistener的選項的想法可選 – 2012-02-07 07:54:48

+0

好的,我會寫代碼並在這裏發佈一段時間,需要一些時間 – 2012-02-07 07:56:06

+0

謝謝你的朋友!我會等待你的回覆。謝謝! – 2012-02-07 07:58:12

2

下面是完整的代碼

看看這對你的作品

package testapplications; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import javax.swing.JOptionPane; 

/** 
* 
* @author sunil 
*/ 
public class ButtonRegistrationTest extends javax.swing.JFrame 
{ 
    private javax.swing.JPanel panel; 
    private javax.swing.JButton register; 
    private javax.swing.JButton unregister; 

    /** Creates new form ButtonRegistration */ 
    public ButtonRegistrationTest() 
    { 
     initComponents(); 
     PanelMouseListener listener = new PanelMouseListener(); 
     register.addActionListener(new RegisterMouseListener(listener)); 
     unregister.addActionListener(new UnRegisterMouseListener(listener)); 
    } 

    private class PanelMouseListener extends MouseAdapter 
    { 
     PanelMouseListener() 
     { 

     } 

     @Override 
     public void mouseClicked(MouseEvent e) 
     { 
      JOptionPane.showMessageDialog(rootPane, "Clicked"); 
     } 
    } 

    private class RegisterMouseListener implements ActionListener 
    { 
     PanelMouseListener listener; 
     RegisterMouseListener(PanelMouseListener listener) 
     { 
      this.listener = listener; 
     } 

     public void actionPerformed(ActionEvent event) 
     { 
      panel.addMouseListener(listener); 
     } 
    } 

    private class UnRegisterMouseListener implements ActionListener 
    { 
     PanelMouseListener listener; 

     public UnRegisterMouseListener(PanelMouseListener listener) 
     { 
      this.listener = listener; 
     } 

     public void actionPerformed(ActionEvent event) 
     { 
      panel.removeMouseListener(listener); 
     } 
    } 


    private void initComponents() { 

     panel = new javax.swing.JPanel(); 
     register = new javax.swing.JButton(); 
     unregister = new javax.swing.JButton(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     panel.setName("panel"); // NOI18N 

     javax.swing.GroupLayout panelLayout = new javax.swing.GroupLayout(panel); 
     panel.setLayout(panelLayout); 
     panelLayout.setHorizontalGroup(
      panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 196, Short.MAX_VALUE) 
     ); 
     panelLayout.setVerticalGroup(
      panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 173, Short.MAX_VALUE) 
     ); 

     register.setText("Register"); 
     register.setName("register"); // NOI18N 

     unregister.setText("Unregister"); 
     unregister.setName("unregister"); // NOI18N 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addComponent(panel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 91, Short.MAX_VALUE) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
        .addComponent(register, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
        .addComponent(unregister, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
       .addGap(27, 27, 27)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addComponent(panel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addGroup(layout.createSequentialGroup() 
         .addGap(23, 23, 23) 
         .addComponent(register) 
         .addGap(18, 18, 18) 
         .addComponent(unregister))) 
       .addContainerGap(127, Short.MAX_VALUE)) 
     ); 

     pack(); 
    } 

    public static void main(String args[]) 
    { 
     new ButtonRegistration().setVisible(true); 
    } 
} 
0

您可以從一個組件刪除所有mouseListeners像下面。

MouseListener[] mouseListeners = component.getMouseListeners(); 
for (MouseListener mouseListener : mouseListeners) { 
    component.removeMouseListener(mouseListener); 
} 

希望這會有所幫助。

相關問題