我想知道你是否可以使用一个适配器,比如一个实现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) {
}
}
答案 0 :(得分:1)
当然可以,因为:
public abstract class MouseAdapter implements MouseListener, MouseWheelListener, MouseMotionListener
它确实实现了MouseListener。
用于接收鼠标事件的抽象适配器类。此类中的方法为空。此类存在是为了创建侦听器对象的便利。
鼠标事件可让您跟踪鼠标按下,释放,单击,移动,拖动,进入组件,退出时以及移动鼠标滚轮的时间。
扩展此类以创建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