当前位置: 首页 > 知识库问答 >
问题:

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

殷功
2023-03-14

我正在尝试改变鼠标按钮,将地图视图从右键平移到左键。

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

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个答案

扶文光
2023-03-14

所看到的结果并不出乎意料,但可能有点违背直觉:您的示例更改了mousepress()实现中DefaultMapController的内部状态。相反,保存对自定义控制器的引用,以便您可以根据需要更改首选按钮:

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

在桌面应用程序中,可以让用户使用单选按钮选择首选的鼠标按钮,并将选定的值保存在用户的首选项中,如下所示。还可以考虑重写getPreferredSize(),而不是调用setSize()

 类似资料:
  • 通常,具有固定参数数的方法优于具有可变参数数的重载方法。但是,该示例的行为不同: 输出: main的第三行用一个参数调用该方法,该参数是一个包含两个元素的字符串[]。但这并不是用一个参数执行方法,而是执行varargs方法,就像我给了它两个参数一样(这有点正常,因为它是一个数组)。 现在的问题是:这应该发生吗?我是否发现了错误或未记录的行为?它这样做的原因是什么? 我为什么这么做:我想做一个快捷方

  • 我有以下代码来解析一个JSON文件: 要处理以下JSON文件: 如果我执行此代码,我将收到以下错误: 所以我开始一步一步地调试应用程序,看看part processing()中的哪个代码部分抛出了这个异常。令人惊讶的是,那里的所有代码都正常执行:没有抛出异常,也没有返回结果I except。 更让我惊讶的是,当我稍微改变第一种方法的代码时,它可以在不产生异常的情况下工作。 我不知道println方

  • 问题内容: 考虑以下代码: 现在,更改方法的可见性,我得到: (for ,for ) (看起来像)。 我期望所有东西都像声明时一样。但是,尽管和本质上是同一件事,但根据in 和的可见性,它们会产生不同的结果。为什么会这样? 问题答案: 继承/覆盖私有方法 在PHP中,子类中的方法(包括私有方法)为: 复制;保留原始功能的范围。 已替换(如果需要,则为“覆盖”)。 您可以使用以下代码查看此内容: 现

  • 问题内容: 我在GregorianCalendar类中遇到一个奇怪的行为,我想知道我是否真的做得不好。 仅当初始化日期的月份的实际Maximum大于我将日历设置为的月份时,才追加此值。 这是示例代码: 我知道问题是由于日历初始化日期是31天(可能是5月),与设置为2月(28天)的月份混淆了。修复很容易(只需在设置年和月之前将day_of_month设置为1),但是我想知道这确实是想要的行为。有什么

  • 问题内容: 我正在为一个问题而苦苦挣扎,我不明白为什么它不起作用。如何通过将变量传递并转换为? 为什么在顶部代码段中不起作用,但在行下方的底部代码段中起作用? 唯一的区别似乎是添加了一个额外的变量,该变量也被键入为? 问题答案: 该是一种原始类型,同时是一个普通的Java类。您不能在原始类型上调用方法。但是该方法在上可用,如javadoc中所示 有关这些原始类型的更多信息,请参见此处

  • 问题内容: 为什么的到哪里去了? 问题答案: 删除任何字符,并从字符串的开头和结尾。