I was wondering if you can use an adapter, say a MouseAdapter inside of a class that implements MouseListener.
I know I can use the Adapter as an anonymous Listener
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();
}
});
But I was wondering if I can define a separate Listener class without having to override all the other abstract methods, like Below
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) {
}
}
Sure you can, because:
public abstract class MouseAdapter implements MouseListener, MouseWheelListener, MouseMotionListener
It does implement MouseListener.
from http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/awt/event/MouseAdapter.java :
An abstract adapter class for receiving mouse events. The methods in this class are empty. This class exists as convenience for creating listener objects.
Mouse events let you track when a mouse is pressed, released, clicked, moved, dragged, when it enters a component, when it exits and when a mouse wheel is moved.
Extend this class to create a MouseEvent (including drag and motion events) or/and MouseWheelEvent listener and override the methods for the events of interest. (If you implement the MouseListener, MouseMotionListener interface, you have to define all of the methods in it. This abstract class defines null methods for them all, so you can only have to define methods for events you care about.)
Create a listener object using the extended class and then register it with a component using the component's addMouseListener addMouseMotionListener, addMouseWheelListener methods. The relevant method in the listener object is invoked and the MouseEvent or MouseWheelEvent is passed to it in following cases:
EDIT:
If your application only needs to know whether the mouse is pressed or released over a component, the other three methods will be empty and ignored. Those methods are unnecessary code. The adapter classes can help reduce the amount of code you must write when your application needs only a small subset of all interface methods. Each adapter class fully implements its associated interface (or interfaces). Then, if you want a listener for a subset of associated methods, you just have to provide that subset. No empty stubs required. Here is just such an adapter for the required MouseListener previously described.
https://blogs.oracle.com/CoreJavaTechTips/entry/listeners_vs_adapters