Java 如何注销JPanel的鼠标侦听器

Java 如何注销JPanel的鼠标侦听器,java,swing,panel,mouselistener,Java,Swing,Panel,Mouselistener,我有两个Jbutton和一个JPanel。 如果注册鼠标侦听器的代码如下所示,我如何删除JPanel上注册的鼠标侦听器。点击一个按钮,这个鼠标侦听器被注册,现在点击另一个按钮,我想删除注册的鼠标侦听器。 如果我在点击第二个按钮时写下这样的东西 pnlImagePanel.removeMouseListener(); 但在上面的一行中,removeMouseListener()方法需要listener对象,我没有实现鼠标侦听器的类。我已经为注册侦听器完成了以下代码,并且自己也

我有两个Jbutton和一个JPanel。 如果注册鼠标侦听器的代码如下所示,我如何删除JPanel上注册的鼠标侦听器。点击一个按钮,这个鼠标侦听器被注册,现在点击另一个按钮,我想删除注册的鼠标侦听器。 如果我在点击第二个按钮时写下这样的东西

          pnlImagePanel.removeMouseListener();
但在上面的一行中,removeMouseListener()方法需要listener对象,我没有实现鼠标侦听器的类。我已经为注册侦听器完成了以下代码,并且自己也在其中编写了代码

所以请告诉我朋友们,我怎样才能注销鼠标侦听器

下面是代码的一部分

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

             }

谢谢大家!

不要创建匿名的
MouseListener
,而是创建实现
MouseListener
类的类的对象,然后将其添加到
JPanel
中进行侦听。删除时,将创建的
MouseListener
对象传递给
removeMouseListener()
函数。

而不是创建匿名
MouseListener
,创建实现
MouseListener
类的类的对象,然后将其添加到
JPanel
进行侦听。删除时,将创建的
MouseListener
对象传递给
removeMouseListener()
函数。

以下是完整的代码

看看这对你有用吗

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

这是完整的代码

看看这对你有用吗

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

您可以从如下组件中删除所有鼠标侦听器

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

希望这有帮助。

您可以从如下组件中删除所有鼠标侦听器

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

希望这有帮助。

谢谢!谢谢你的答复。我也有同样的想法,但实际上我想知道如何注销以上述方式注册的mouselistener,因为我有大代码。而且,通过编写另一个类来管理代码将非常繁琐。因此,考虑编写另一个实现mouselistener optionalok的类,我将编写代码并稍后在这里发布,需要一些时间谢谢你的朋友!我将等待你的答复。谢谢非常感谢。谢谢你的答复。我也有同样的想法,但实际上我想知道如何注销以上述方式注册的mouselistener,因为我有大代码。而且,通过编写另一个类来管理代码将非常繁琐。因此,考虑编写另一个实现mouselistener optionalok的类,我将编写代码并稍后在这里发布,需要一些时间谢谢你的朋友!我将等待你的答复。谢谢