在下面的代碼中,我演示了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