JMapViewer:setMovementMouseButton()方法

时间:2017-03-25 22:31:40

标签: java mouseevent assign jmapviewer

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

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

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. 再次单击鼠标左键。拖动时,平移将分配给鼠标左键。

  4. 我发现这种行为很奇怪。也许,我正在使用这种方法......

    如何直接更改平移按钮,而不是再次发布和单击?谢谢你的帮助...

1 个答案:

答案 0 :(得分:2)

看到的结果并不出乎意料,但它们可能有点违反直觉:您的示例会改变<{1}}实现中DefaultMapController 的内部状态。而是保存对自定义控制器的引用,以便您可以根据需要更改首选按钮:

mousePressed()

在桌面应用程序中,您可以让用户使用单选按钮选择首选鼠标按钮,并将所选值保存在用户的 JMapViewer map = new JMapViewer(); DefaultMapController dmc = new DefaultMapController(map){…}; dmc.setMovementMouseButton(MouseEvent.BUTTON1); 中,如图所示here。另请考虑覆盖Preferences,如here所示,而不是调用getPreferredSize()