Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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
javafx2mouseclicked事件未按其应有的方式生成(如在JAVA中)_Java_Mouseevent_Javafx 2_Mouseclick Event - Fatal编程技术网

javafx2mouseclicked事件未按其应有的方式生成(如在JAVA中)

javafx2mouseclicked事件未按其应有的方式生成(如在JAVA中),java,mouseevent,javafx-2,mouseclick-event,Java,Mouseevent,Javafx 2,Mouseclick Event,在下面的代码中,我演示了java和javaFX2之间的区别,因为它涉及到鼠标点击事件的生成,我不知道这是预期的还是可以被视为bug 在JavaFX2.0中,您似乎可以按下鼠标按钮,移动鼠标任意时间,然后当您释放按钮时,将触发鼠标单击事件。与JAVA不同的是,如果单击鼠标按钮后移动鼠标,然后释放按钮,则不会触发MouseClicked事件 public class FrameClass extends JFrame{ public FrameClass() throws HeadlessExce

在下面的代码中,我演示了java和javaFX2之间的区别,因为它涉及到鼠标点击事件的生成,我不知道这是预期的还是可以被视为bug

在JavaFX2.0中,您似乎可以按下鼠标按钮,移动鼠标任意时间,然后当您释放按钮时,将触发鼠标单击事件。与JAVA不同的是,如果单击鼠标按钮后移动鼠标,然后释放按钮,则不会触发MouseClicked事件

public class FrameClass extends JFrame{

public FrameClass() throws HeadlessException {
    setPreferredSize(new Dimension(300,300));
    final Canvas canv = new Canvas();
    canv.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {
            canv.getGraphics().drawRect(e.getX(), e.getY(), 10, 50);
        }

    });

    getContentPane().add(canv);
    pack();
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

}

public static void main(String[] args) {
    new FrameClass();
}
}
要证明这一点,请尝试以下代码,其中当单击鼠标时,会在单击点绘制一个矩形。即使按左键,移动鼠标,然后释放按钮,矩形也会被绘制(在释放鼠标按钮的点上)

所以问题本身就是:如何证明这种差异是合理的?谁的行为是对的,谁的行为是错的?在这之后,我如何模仿JavaFX2,0中的鼠标,使其行为与Java中的相同

谢谢你的帮助


附言:进口商品不见了

这是有意的:为同一节点中的每个后续按下和释放操作生成鼠标单击

哪种行为是对的,哪种行为是错的,这是不存在真理的——不同的Tookit使用这两种方法。目前的行为对JavaFX最有用


注意:请注意,双击(或更多)可验证鼠标是否在两次单击之间移动。

谢谢回答。老实说,我一点也不喜欢这个功能,因为当我想要一个与Java中相同的鼠标点击事件时,我必须编写自己的鼠标点击的肮脏实现……如果不编写样板代码,就无法验证点击/释放处理程序中按下了哪个按钮?@ajeh,这是一个完全不同的问题,请,分开问
public class FrameClass extends JFrame{

public FrameClass() throws HeadlessException {
    setPreferredSize(new Dimension(300,300));
    final Canvas canv = new Canvas();
    canv.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {
            canv.getGraphics().drawRect(e.getX(), e.getY(), 10, 50);
        }

    });

    getContentPane().add(canv);
    pack();
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

}

public static void main(String[] args) {
    new FrameClass();
}
}