gpt4 book ai didi

java - JMapViewer:setMovementMouseButton() 方法的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 02:36:10 25 4
gpt4 key购买 nike

我正在尝试更改鼠标按钮以将 map View 从右侧按钮平移到左侧。

有一个简单的代码在单击鼠标左键后更改按钮:

public class Map extends JMapViewer {

public Map() {
new DefaultMapController(this){
public void mousePressed(MouseEvent e) {
this.setMovementMouseButton(MouseEvent.BUTTON1);
}
};
}
}

主类:

public class JMapViewerDemo {
public static void main(String[] args) {
JFrame f = new JFrame();
f.add(new Map());
f.setSize(800, 600);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

令人惊讶的是,代码不起作用(没有进行重新分配)。为什么?但是,调用父类方法后

public void mousePressed(MouseEvent e) {    
super.mousePressed(e); //Calling the parent-class method
this.setMovementMouseButton(MouseEvent.BUTTON1);
}

观察到以下行为:

  1. 单击鼠标左键。拖动时没有重新分配已经完成(同样的情况)。

  2. 松开鼠标左键。

  3. 再次单击鼠标左键。拖动时,平移将分配给鼠标左键。

我觉得这种行为很奇怪。也许,我错误地使用了这个方法......

如何直接更改平移按钮,而不需要松开并再次单击?感谢您的帮助...

最佳答案

看到的结果并不意外,但它们可能有点违反直觉:您的示例改变了 DefaultMapController 的内部状态您的 mousePressed() 的实现中。相反,保存对自定义 Controller 的引用,以便您可以根据需要更改首选按钮:

    JMapViewer map = new JMapViewer();
DefaultMapController dmc = new DefaultMapController(map){…};
dmc.setMovementMouseButton(MouseEvent.BUTTON1);

在桌面应用程序中,您可以让用户使用单选按钮选择首选鼠标按钮,并将所选值保存在用户的 Preferences 中。如图here 。还要考虑覆盖 getPreferredSize() ,如图here ,而不是调用 setSize() .

关于java - JMapViewer:setMovementMouseButton() 方法的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43022710/

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