2016-07-25 46 views
0

我是javafx的新手,目前正在使用菜單menuitems。我希望覆蓋顯示contextMenu的默認事件,即使未按下菜單,但當鼠標懸停在其上方時,即使顯示相鄰菜單的contextMenu,也會顯示該菜單。這發生在每個應用程序中,因爲它非常方便。但由於某種原因,我不需要它。我嘗試在菜單上捕獲鼠標事件,以便我可以相應地工作,但沒有任何反應。將鼠標事件處理程序添加到javafx中的菜單中

menu.addEventHandler(MouseEvent.ANY, event -> { 
      System.out.println("Mouse event occured"); 
      }); 

這裏menu是我想添加此行爲的人。

+0

你在哪裏添加了這段代碼?在fxml控制器或應用程序類? – mhtb

+0

它被添加到與菜單欄fxml – Dota2

+0

相關聯的控制器中,實際上,您無法將鼠標處理程序添加到菜單中。嘗試使用簡單的菜單和菜單項,如果你不想懸停的行動。 – mhtb

回答

0

確實無法將鼠標事件直接添加到javafx中的菜單中,但是我找到了一個解決方法。現在解決方法涉及menuBar(放置哪個菜單),它可以捕獲鼠標事件。所以在菜單欄增加一個eventFilter鼠標事件,

// variable to store the mouse-event-type 
     private MouseEvent mouseEventType 

    // for registering mouse pressed event; 
    // addEventFilter since it is called during the capturing phase 
     mainMenu.addEventFilter(MouseEvent.ANY, mouseEvent -> { 
     mouseEventType = mouseEvent; 
    }); 

,然後處理在menu.setOnShown事件的伎倆。

​​3210

這裏因此,發生的事情是,mouseEventType被初始化爲MouseEvent.MOUSE_PRESSED上點擊菜單上,瞬間setOnShown被調用,顯示包含的菜單項contextMenu的默認操作。現在可以給出不同的邏輯。

相關問題