2012-02-07 8 views
1

私は2つのJButtonとJPanelを持っています。 マウスリスナーを登録するコードが次のような場合、JPanelで登録されたマウスリストを削除するにはどうすればよいですか? 1つのJButtonをクリックすると、このmouselistenerが登録され、他のJButtonをクリックすると、登録済みのマウスリスナーを削除します。 2番目のJButtonをクリックすると、このようなことを書きます。JPanelのマウスリスナーを登録解除するには

上記の行の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を実装する別のクラスを書くという考え方を入れてください。 –

+0

ok、私はコードを書いてしばらくここに投稿しますが、時間がかかります –

+0

ありがとうございました!私はあなたの返事を待つでしょう。ありがとう! –

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

のために働く場合は、以下のようなコンポーネントからすべてのMouseListenerを削除することができます参照してくださいです。

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

これが役立ちます。

関連する問題