2014-09-26 96 views
3

我最近開始使用Java FX,FXML和場景構建器,並且我一直在嘗試將關鍵偵聽器添加到場景的其中一個控制器。當我這樣做時,關鍵聽衆不會按照他們的意圖工作,我認爲這是因爲他們沒有專注於特定的場景。我嘗試訪問控制器所屬的場景,以便直接設置它,但是它出現了它是空場景的一部分。JavaFX從控制器中獲取場景

有沒有一種方法可以訪問該控制器所用的場景,以嘗試將關鍵事件和偵聽器分配給該特定場景?我應該通過在整個應用程序中靜態的rootController嗎?或者,更好的是,有沒有更簡單的方法來解決這個問題?

我看到的大多數例子都假設一切都主要集中在一個主類中,或者在沒有引入FXML的情況下在其他類中分開,我不知道如何在擁有java控制器時應用修補程序, FXML頁面和主應用程序全部分開。

感謝您的幫助!

回答

8

使用控制器中綁定的任何控件,並使用其上的getScene()

記住不要在initialize()根元素使用(雖然完全處理)仍然沒有放置在現場的時候initialize()被稱爲該控制器

public class WindowMainController implements Initializable { 

    @FXML 
    private Button button; 

    @FXML 
    private void handleButtonAction(ActionEvent event) { 
     System.out.println(button.getScene()); // Gives you the Scene 
    } 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     System.out.println(button.getScene()); // Prints null 
    } 

} 
+0

是啊!這給了我場景而不是null ^^。我試圖在init()方法中獲取它,所以一定是這個問題!謝謝!現在,我可以讓鍵盤工程師開始工作:D – Keanu 2014-09-26 13:56:23

+0

如果您正試圖將'keylisteners'添加到場景中,我會建議在場景創建的地方進行。 *儘管我不確定你的要求* – ItachiUchiha 2014-09-26 13:58:51

+0

我正在嘗試使用所有這些東西來製作遊戲,而現在我擁有它的方式有一個場景是根,我只是根據在哪裏切換舞臺用戶將在每次。當我改變舞臺時,我是否會將它添加到場景中,所以關鍵事件已經存在?我將如何從控制器外部訪問新控制器和舞臺中的元素?(例如,當在舞臺控制器中實例化圖像時,創建一個移動圖像的關鍵事件) – Keanu 2014-09-26 14:14:05

相關問題