Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JMapViewer:setMovementMouseButton()方法的奇怪行为_Java_Mouseevent_Assign_Jmapviewer - Fatal编程技术网

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

Java JMapViewer:setMovementMouseButton()方法的奇怪行为,java,mouseevent,assign,jmapviewer,Java,Mouseevent,Assign,Jmapviewer,我正在尝试更改鼠标按钮以将地图视图从右键平移到左键 单击鼠标左键后,有一个更改按钮的简单代码: public class Map extends JMapViewer { public Map() { new DefaultMapController(this){ public void mousePressed(MouseEvent e) {

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

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

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);
}   
观察到以下行为:

  • 单击鼠标左键。拖动时,没有重新分配 已经做了(同样的情况)

  • 松开鼠标左键

  • 再次单击鼠标左键。拖动时,平移将指定给鼠标左键

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


    如何直接更改平移按钮,而无需释放并再次单击?感谢您的帮助……

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

        JMapViewer map = new JMapViewer();
        DefaultMapController dmc = new DefaultMapController(map){…};
        dmc.setMovementMouseButton(MouseEvent.BUTTON1);
    
    在桌面应用程序中,您可以让用户使用单选按钮选择首选鼠标按钮,并在用户的
    首选项中保存所选值,如图所示。还可以考虑重写<代码> GETAPYRESSIZE()<代码>,如图所示,而不是调用<代码> SESIZE()< <代码> > < /P>