作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试更改鼠标按钮以将 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);
}
观察到以下行为:
单击鼠标左键。拖动时没有重新分配已经完成(同样的情况)。
松开鼠标左键。
再次单击鼠标左键。拖动时,平移将分配给鼠标左键。
我觉得这种行为很奇怪。也许,我错误地使用了这个方法......
如何直接更改平移按钮,而不需要松开并再次单击?感谢您的帮助...
最佳答案
看到的结果并不意外,但它们可能有点违反直觉:您的示例改变了 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/
我正在尝试更改鼠标按钮以将 map View 从右侧按钮平移到左侧。 有一个简单的代码在单击鼠标左键后更改按钮: public class Map extends JMapViewer { p
我是一名优秀的程序员,十分优秀!