在下面的代码中,我演示了 java 和 javaFX2 之间的区别,它涉及到 MOUSE_CLICKED 事件的生成,我不知道它是否应该被预期或可以被视为错误。
似乎在 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 中的 mouseClicked 以使其行为与 Java 中的相同?
谢谢您的帮助!
PS。进口货不见了!