gpt4 book ai didi

java - 为什么我不能只使用 MouseAdapter,而不使用 MouseMotionAdapter?

转载 作者:行者123 更新时间:2023-12-02 01:33:44 26 4
gpt4 key购买 nike

我的应用程序的窗口可以通过拖动其菜单栏来移动。但是,我不明白为什么必须使用 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 注册的监听器才会发送鼠标移动事件,例如拖动。

来自MouseAdapter docs :

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com