我的应用程序的窗口可以通过拖动其菜单栏来移动。 但是,我不明白为什么必须使用 MouseMotionAdapter() 来实现此功能。
两个类都有方法:mouseDragged(),因此我删除了MouseMotionAdapter,并将该函数移至MouseAdapter()。我无法再拖动窗口了。为什么?
这段代码完美运行。
menuBar.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
mouseX = e.getX();
mouseY = e.getY();
}
});
//마우스로 매뉴를 잡고 움직일 수 있게 해주는 코드.
menuBar.addMouseMotionListener(new MouseMotionAdapter(){
@Override
public void mouseDragged(MouseEvent e) {
int x = e.getXOnScreen();
int y = e.getYOnScreen();
setLocation(x - mouseX, y - mouseY);
}
});
但是,这并不
menuBar.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
mouseX = e.getX();
mouseY = e.getY();
}
@Override
public void mouseDragged(MouseEvent e) {
int x = e.getXOnScreen();
int y = e.getYOnScreen();
setLocation(x - mouseX, y - mouseY);
}
});
感谢您的支持
最佳答案
您可以只使用MouseAdapter
,但您必须调用addMouseMotionListener
,以便将鼠标移动事件发送给它。
MouseAdapter ma = new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
mouseX = e.getX();
mouseY = e.getY();
}
@Override
public void mouseDragged(MouseEvent e) {
int x = e.getXOnScreen();
int y = e.getYOnScreen();
setLocation(x - mouseX, y - mouseY);
}
});
menuBar.addMouseListener(ma);
menuBar.addMouseMotionListener(ma);
只有使用 addMouseMotionListener
注册的监听器才会发送鼠标移动事件,例如拖动。
Create a listener object using the extended class and then register it with a component using the component's
addMouseListener
,addMouseMotionListener
,addMouseWheelListener
methods.
关于java - 为什么我不能只使用 MouseAdapter,而不使用 MouseMotionAdapter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55556271/