2014-09-26 4 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

+0

Если вы пытаетесь добавить «keylisteners» в сцену, я бы советовал делать это там, где создается сцена. * Хотя я не уверен в вашем требовании * – ItachiUchiha

+0

Я пытаюсь создать игру, используя все это, и теперь у меня есть одна сцена, которая будет корнем, и я просто переключаю сцену в зависимости от того, где пользователь будет в любое время. Я просто добавлю его на сцену, когда я сменю сцену, так что ключевые события уже есть? И как я могу получить доступ к элементам внутри нового контроллера и сцене из-за пределов контроллера? (Т. Е. Сделать ключ для перемещения изображения при создании экземпляра изображения в контроллере сцены) – Keanu

Смежные вопросы