你可以在Listener类中使用Adapter吗?

时间:2013-09-01 08:43:14

标签: java swing listener mouse-listeners

我想知道你是否可以使用一个适配器,比如一个实现MouseListener的类中的MouseAdapter。

我知道我可以将适配器用作匿名侦听器

    addMouseListener(new MouseAdapter() {
        @Override
        public void mousePressed(MouseEvent e) {
            panel.setBackground(Color.BLACK);
            repaint();
        }

        @Override
        public void mouseReleased(MouseEvent e) {
            panel.setBackground(Color.WHITE);
            repaint();
        }
    });

但是我想知道我是否可以定义一个单独的Listener类而不必覆盖所有其他抽象方法,如下面

    private class myListener implements MouseListener {
        @Override
        public void mousePressed(MouseEvent e) {
            panel.setBackground(Color.BLACK);
            repaint();
        }

        @Override
        public void mouseReleased(MouseEvent e) {
            panel.setBackground(Color.WHITE);
            repaint();
        }

        @Override
        public void mouseClicked(MouseEvent e) {
        }

        @Override
        public void mouseEntered(MouseEvent e) {
        }

        @Override
        public void mouseExited(MouseEvent e) {
        }
}

1 个答案:

答案 0 :(得分:1)

当然可以,因为:

public abstract class MouseAdapter implements MouseListener, MouseWheelListener, MouseMotionListener

它确实实现了MouseListener。

来自http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/awt/event/MouseAdapter.java

用于接收鼠标事件的抽象适配器类。此类中的方法为空。此类存在是为了创建侦听器对象的便利。

鼠标事件可让您跟踪鼠标按下,释放,单击,移动,拖动,进入组件,退出时以及移动鼠标滚轮的时间。

扩展此类以创建MouseEvent(包括拖动和运动事件)或/和MouseWheelEvent侦听器,并覆盖感兴趣事件的方法。 (如果实现MouseListener,MouseMotionListener接口,则必须定义其中的所有方法。此抽象类为它们定义了所有的null方法,因此您只需要为您关注的事件定义方法。)

使用扩展类创建一个侦听器对象,然后使用组件的addMouseListener addMouseMotionListener,addMouseWheelListener方法将其注册到组件。调用侦听器对象中的相关方法,并在以下情况下将MouseEvent或MouseWheelEvent传递给它:

  • 按下,释放或单击鼠标按钮时(按下并按下) 发布)
  • 当鼠标光标进入或退出组件
  • 时 鼠标滚轮旋转,鼠标移动或拖动时

编辑:

如果您的应用程序只需要知道是否在组件上按下或释放鼠标,则其他三种方法将为空并被忽略。那些方法是不必要的代码。当应用程序只需要所有接口方法的一小部分时,适配器类可以帮助减少必须编写的代码量。每个适配器类都完全实现其关联的接口(或接口)。然后,如果您想要一个关联方法子集的侦听器,您只需提供该子集。不需要空的存根。这里只是前面描述的所需MouseListener的适配器。

MouseListener mouseListener = new MouseAdapter() {
  public void mousePressed(MouseEvent mouseEvent) {
      System.out.println("I'm pressed: " + mouseEvent);
  }
  public void mouseReleased(MouseEvent mouseEvent)  {
      System.out.println("I'm released: " + mouseEvent);
  }
};

https://blogs.oracle.com/CoreJavaTechTips/entry/listeners_vs_adapters