在下面的代码中,我演示了java和javaFX2之间的区别,只要它涉及生成MOUSE_CLICKED事件,我不知道它是否应该是预期或可被视为错误。JavaFX 2 MouseClicked事件不会像应该那样生成(如在JAVA中)
看来,在JavaFX 2.0中,您可以按下鼠标按钮,只要您喜欢就移动鼠标,然后释放按钮时,会触发mouseClicked事件。与JAVA相反,如果在单击鼠标按钮后移动鼠标然后释放该按钮,则不会触发MouseClicked事件。
为了证明这一点,请尝试下面的代码,点击鼠标时在点击点处绘制一个矩形。即使按左键,移动鼠标,然后松开按钮的矩形将绘制(在释放鼠标按键的点)...
public class MouseClickTester extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
final Group root = new Group();
Rectangle rect = new Rectangle(0, 0, 300, 300);
rect.setFill(Color.RED);
rect.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent me) {
Rectangle yellowRect = new Rectangle(me.getSceneX(), me.getSceneY(),10,50);
yellowRect.setFill(Color.YELLOW);
root.getChildren().add(yellowRect);
}
});
root.getChildren().add(rect);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
}
下面的代码不相同,但在简单的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();
}
}
所以这个问题本身:这种差异如何证明是合理的?谁表现正确,谁错了?并且在后遗症中,我如何模拟javaFX 2,0中的mouseClick以表现与Java中的相同?
感谢您的帮助!
PS。进口缺失!
感谢您的回答。老实说,我不喜欢所有这个功能,因为当我想要一个与Java相同的MouseClick事件时,我必须编写我自己的一个小小的点击鼠标的实现... – Pitelk 2012-01-19 17:00:15
没有办法验证哪个按钮被按下点击/释放处理程序,而无需编写样板代码? – ajeh 2013-11-20 03:23:33
@ajeh,这是一个完全不同的问题,请分开问问 – 2013-11-20 07:30:18