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

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

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

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

感谢您的帮助!

【问题讨论】:

    标签: java javafx-2 keylistener scenebuilder


    【解决方案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? 你可以为此使用属性绑定
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多