我的应用程序窗口可以通过拖动其菜单栏来移动。 但是,我不明白为什么必须使用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);
}
});
感谢您的支持
答案 0 :(得分:2)
您可以仅使用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
注册的侦听器将被发送鼠标移动事件,例如拖动。
使用扩展类创建一个侦听器对象,然后使用组件的
addMouseListener
,addMouseMotionListener
,addMouseWheelListener
方法向该组件注册。