我準備把我的頭髮拉出來。我正在開發遊戲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有點新,所以也許這不是一個好的方法來做到這一點。但由於某些原因,鼠標事件並不會使其通過底層堆疊面板 - >即它們被邊框面板的中心面板吸收。我無法將事件處理程序添加到滾動窗格,網格窗格或網格窗格中的任何單元格。
您發佈的代碼片段沒有任何問題:錯誤可能與您設置的方式有關,但沒有任何人可以幫助您看到該錯誤。你需要創建一個[MCVE]並且[編輯]你的問題來包含它。 –
如果你不會發佈一個MCVE,這將是很難回答這個問題。你可以嘗試使'myObjectLayer'和'myOverlayLayer'鼠標變爲透明('setMouseTransparent(true)'),或者你可以嘗試用'myOverlayLayer'而不是'myParent'註冊鼠標處理程序。但是,我再也不知道這些是否可行。 –
對不起 - 在一個工作 - 不想發佈一堆班。奇怪的是,如果我只是在測試類中將事物層疊在一起,它就能正常工作:(所以我試圖儘可能簡單地重現它。 –