2015-11-16 17 views
-1

我準備把我的頭髮拉出來。我正在開發遊戲GUI界面,其中有一個由單元網格組成的地圖。JavaFX節點沒有註冊鼠標事件

細胞的網格由一個StackPane,然後幾層內由任一ImageViews或形狀等

整個事情包含在GridPane,其包括BorderPane的中心元件的;

我不能將鼠標事件添加到底層的場景,因爲然後所有節點都得到它 - >沒有好處。我需要突出顯示鼠標下的節點。

下面是創建堆棧中的代碼:

private void initializePanes() { 
    myParent = new StackPane(); 
    myObjectLayer = new StackPane(); 
    myOverlayLayer = new StackPane(); 
    myParent.getChildren().addAll(myObjectLayer, myOverlayLayer); 
    myParent.getStylesheets().add(myConfig.getString("StyleSheet")); 
} 

,這裏是設置一個事件處理程序的代碼 - >沒有什麼工作或寄存器。我也嘗試過EventFilters - 沒有骰子,除非我寫入底層場景,這是一個No-Go。

private void initializeHandlers() { 
    myParent.addEventHandler(MouseEvent.ANY, (e) -> System.out.println("I'm responding")); 
} 

幫助將不勝感激!

編輯:這裏的問題,整體應用佈局爲這樣:

BorderPane: 中心 - > StackPane 在這一stackpane我有一個ScrollPane,其中包含了GridPane,其中包含細胞(我發佈了上面的代碼)。

我對JavaFX有點新,所以也許這不是一個好的方法來做到這一點。但由於某些原因,鼠標事件並不會使其通過底層堆疊面板 - >即它們被邊框面板的中心面板吸收。我無法將事件處理程序添加到滾動窗格,網格窗格或網格窗格中的任何單元格。

+0

您發佈的代碼片段沒有任何問題:錯誤可能與您設置的方式有關,但沒有任何人可以幫助您看到該錯誤。你需要創建一個[MCVE]並且[編輯]你的問題來包含它。 –

+0

如果你不會發佈一個MCVE,這將是很難回答這個問題。你可以嘗試使'myObjectLayer'和'myOverlayLayer'鼠標變爲透明('setMouseTransparent(true)'),或者你可以嘗試用'myOverlayLayer'而不是'myParent'註冊鼠標處理程序。但是,我再也不知道這些是否可行。 –

+0

對不起 - 在一個工作 - 不想發佈一堆班。奇怪的是,如果我只是在測試類中將事物層疊在一起,它就能正常工作:(所以我試圖儘可能簡單地重現它。 –

回答

0

想通了。 Map的主堆棧窗格中有另一個層 - >它攔截了這些調用。刪除它 - 我會弄清楚以後如何實現它。