2012-01-18 47 views
3

在下面的代碼中,我演示了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。進口缺失!

回答

2

這是故意的:爲同一節點中的每個隨後按下並釋放的動作生成鼠標單擊。

行爲是對還是錯都沒有道理 - 不同的行爲使用兩種方法。決定當前行爲對JavaFX最有用。

N.B .:請注意,double(以及更多)點擊驗證鼠標是否在點擊之間移動。

+0

感謝您的回答。老實說,我不喜歡所有這個功能,因爲當我想要一個與Java相同的MouseClick事件時,我必須編寫我自己的一個小小的點擊鼠標的實現... – Pitelk 2012-01-19 17:00:15

+0

沒有辦法驗證哪個按鈕被按下點擊/釋放處理程序,而無需編寫樣板代碼? – ajeh 2013-11-20 03:23:33

+0

@ajeh,這是一個完全不同的問題,請分開問問 – 2013-11-20 07:30:18