【问题标题】:How can I obtain the primary Stage in a JavaFX application?如何获取 JavaFX 应用程序中的主要阶段?
【发布时间】:2013-03-26 05:06:41
【问题描述】:

是否可以在运行的 JavaFX 应用程序中获得对主要阶段的引用?

这个问题的上下文是我想编写一个库来操作另一种语言(Prolog)的 JavaFX 接口。 为了做到这一点,我的图书馆需要访问主舞台。 目标是 JavaFX 应用程序的程序员不必在 start 方法中显式存储对 Stage 对象的引用,因此它对用户界面设计者应该是透明的(这是a related question,以防需要更多详细信息) .

这个问题的一部分是获取对原始 JavaFX 应用程序的主要 Stage 对象的引用,所以我想知道某处的静态方法之类的东西是否可以让我访问它。

【问题讨论】:

标签: java javafx


【解决方案1】:

不确定正确的决定,但它适用于我的情况。

使用 getter 和 setter 在主类中创建静态字段:

public class MyApp extends Application {

    private static Stage pStage;

    @Override
    public void start(Stage primaryStage) {
        setPrimaryStage(primaryStage);

        pStage = primaryStage;
        ...
    }

    public static Stage getPrimaryStage() {
        return pStage;
    }

    private void setPrimaryStage(Stage pStage) {
        MyApp.pStage = pStage;
    }
}

接下来,在必要的地方调用 getter。例如:

stageSecond.initOwner(MyApp.getPrimaryStage());

【讨论】:

    【解决方案2】:

    我只是在研究这个问题。似乎没有任何内置方法可以获取初级阶段。您可以从主窗口中的节点使用 node.getScene().getWindow(),但不能在其他窗口中使用。显式存储 primaryStage 引用显然是唯一可靠的方法。

    【讨论】:

      【解决方案3】:

      由于您在 Application#start(Stage primaryStage) 方法中收到主要阶段,因此您可以保留它。

      【讨论】:

        【解决方案4】:

        只是为了补充 VladmirZ 的答案。 按照第一部分。 然后。用于隐藏或关闭操作按钮上的 primaryStage。

        我这样做。示例

        void ActionButton(ActionEvent event) throws Exception {
        
        
            Stage StageTest = TabelaApp.getTabelaStage(); // call the getter. In my case TabelaApp.getTabelaStage
            StageTest.hide(); //Or Close
        
            // This Call the Stage you want
            Parent root = FXMLLoader.load(getClass().getResource("/tabela2/FrmTabela2.fxml"));
            Scene scene = new Scene(root);
            Stage stage = new Stage();
            stage.setScene(scene);
            stage.show();
        
        
        }
        

        【讨论】:

        • 试着让你的回答更有建设性,并解释它为什么有效。另外,尽量让答案更清楚,而不仅仅是一个例子。
        猜你喜欢
        • 1970-01-01
        • 2013-06-12
        • 2015-03-14
        • 2012-10-17
        • 1970-01-01
        • 2015-12-31
        • 1970-01-01
        • 2014-05-31
        • 2014-12-24
        相关资源
        最近更新 更多