Как мне отменить регистрацию мыши в JPanel - PullRequest
1 голос
/ 07 февраля 2012

У меня есть две JButton и JPanel. Как я могу удалить зарегистрированный слушатель мыши на JPanel, если код для регистрации слушателя мыши выглядит следующим образом. По щелчку одного JButton этот курсор мыши регистрируется, и теперь по щелчку другого JButton я хочу удалить зарегистрированного слушателя мыши. Если я напишу что-то вроде этого по щелчку Second JButton.

          pnlImagePanel.removeMouseListener();

Но в приведенной выше строке для метода removeMouseListener () требуется объект прослушивателя, и у меня нет класса, в котором реализован прослушиватель мыши. Я сделал следующий вид кодирования для регистрации слушателя, а также сам написал код.

Так что, пожалуйста, ведите меня, друзья. Как я могу отменить регистрацию мышиного прослушивателя.

Вот некоторая часть кода.

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

             }

Спасибо!

Ответы [ 3 ]

2 голосов
/ 07 февраля 2012

Вот полный код

Посмотрите, работает ли это для вас

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);
    }
}
2 голосов
/ 07 февраля 2012

Вместо создания анонимного MouseListener создайте объект класса, который реализует класс MouseListener, а затем добавьте его в JPanel для прослушивания. при удалении передайте созданный объект MouseListener в функцию removeMouseListener().

0 голосов
/ 30 июля 2015

Вы можете удалить все mouseListener из компонента, как показано ниже.

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...