Ern*_*dis 9 java swing mouse-listeners mousemotionevent
我的目标是简化这段代码(一切正常):
package test;
import java.awt.Window;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JWindow;
public class A extends JWindow implements MouseListener, MouseMotionListener {
public A() {
addMouseListener(A.this);
addMouseMotionListener(A.this);
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
//This method is being used, working fine
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseDragged(MouseEvent e) {
//This method is being used, working fine
}
@Override
public void mouseMoved(MouseEvent e) {
}
}
Run Code Online (Sandbox Code Playgroud)
但如果我决定这样使用MouseAdapter
:
addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
transferFocusBackward();
//This method is being used, working fine
}
@Override
public void mouseDragged(MouseEvent e) {
//This method is being used, not working anymore
}
});
Run Code Online (Sandbox Code Playgroud)
mouseDragged
没有收到任何活动 但如果我这样添加MouseMotionListener
:
addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
//This method is being used, working fine
}
});
addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
//This method is being used, working fine
}
});
Run Code Online (Sandbox Code Playgroud)
然后一切都恢复正常.所以我的问题是-什么是目的mouseDragged
,mouseMoved
而mouseWheelMoved
在方法MouseAdapter
类,如果他们不工作?
OK,我想我现在明白了:在MouseAdapter
类文档据说是"使用扩展的类创建一个侦听器对象,然后使用组件的一个组件注册addMouseListener
,addMouseMotionListener
,addMouseWheelListener
方法".所以现在它看起来像:
private class MouseListeners extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
//This method is being used, working fine
}
@Override
public void mouseDragged(MouseEvent e) {
//This method is being used, working fine
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
MouseListeners listeners = new MouseListeners();
addMouseListener(listeners);
addMouseMotionListener(listeners);
Run Code Online (Sandbox Code Playgroud)
现在一切都好.