JavaFX 从控制器获取场景

Posted

技术标签:

【中文标题】JavaFX 从控制器获取场景【英文标题】:JavaFX getting scene from a controller 【发布时间】:2014-11-21 12:59:49 【问题描述】:

我最近开始使用 Java FX、FXML 和场景构建器,并且一直在尝试将关键侦听器添加到场景的控制器之一。但是,当我这样做时,关键听众并没有按应有的方式工作,我认为这是因为他们没有专注于那个特定的场景。我试图访问控制器所在的场景以便直接设置它,但结果显示它是空场景的一部分。

有没有办法访问使用此控制器的场景,以便尝试将关键事件和侦听器分配给该特定场景?我应该通过整个应用程序中静态的 rootController 吗?或者,更好的是,有没有更简单的方法来解决这个问题?

我看到的大多数示例都假设所有内容大部分都放在一个主类中,或者在没有引入 FXML 的情况下与其他几个类分开,当我有 java 控制器 FXML 时,我不确定如何应用它们的修复页面和主应用程序都分开了。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

使用绑定在控制器中的任何控件并在其上使用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
    


【讨论】:

是的!这给了我场景而不是 null ^^。我试图在 init() 方法中得到它,所以这一定是问题所在!谢谢!现在,我希望可以让 keylisteners 工作:D 如果您尝试将keylisteners 添加到场景中,我建议您在创建场景的地方进行。 虽然我不确定你的要求 我正在尝试使用所有这些东西制作一款游戏,而我现在拥有它的方式有一个场景将是根,我只是根据用户的位置切换舞台在每个时间。换舞台的时候是不是直接加到场景里,关键事件都已经有了?以及如何从控制器外部访问新控制器和舞台内的元素?(即,当图像在舞台控制器中实例化时,制作一个键事件来移动图像) 我希望switch the stage,你的意思是switch the viewWould I just add it onto the scene when I change the stage, so the key events are already there,如果没有什么阻止你这样做,你可以做到。 And how would I access elements inside the new controller and stage from outside the controller? 你可以为此使用属性绑定

以上是关于JavaFX 从控制器获取场景的主要内容,如果未能解决你的问题,请参考以下文章

Javafx只初始化一次控制器构造函数?

JavaFX 控制器类不工作

使用 JavaFX 切换场景时出现 InvocationTargetException

JavaFX 在没有控制器的 fxml 中包含 fxml

JavaFX:从线程更新控制器类中的 UI 元素

如何使用相同的模型对象初始化 JavaFX 控制器?