【问题标题】:How do I unregister mouse listener of JPanel如何注销 JPanel 的鼠标侦听器
【发布时间】:2012-02-28 15:58:24
【问题描述】:

我有两个 JButton 和一个 JPanel。 如果注册鼠标侦听器的代码如下,我怎么能在 JPanel 上删除注册的鼠标侦听器。单击一个 JButton 时,此鼠标侦听器已注册,现在单击其他 JButton 时,我想删除已注册的鼠标侦听器。 如果我在第二个 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);
            }
        });

             }

谢谢!

【问题讨论】:

    标签: java swing panel mouselistener


    【解决方案1】:

    您可以像下面这样从组件中删除所有 mouseListeners。

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

    希望这会有所帮助。

    【讨论】:

      【解决方案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);
          }
      }
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 谢谢!期待你的答复。我有同样的想法,但实际上我想知道如何取消注册以上述方式注册的鼠标侦听器,因为我有大代码。并且通过编写另一个类来管理代码将非常繁琐。所以提出编写另一个实现 mouselistener 的类的想法可选
        • 好的,我一会儿写代码贴在这里,需要一些时间
        • 谢谢你的朋友!我会等待你的回复。谢谢!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-05
        • 2015-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多