【问题标题】:Making Stage static in javaFX. is it a good idea?在 javaFX 中使 Stage 静态化。这是个好主意吗?
【发布时间】:2014-09-26 00:04:00
【问题描述】:

我实际上想构建一个 fx 应用程序,从一个 fxml 转到另一个(使用此过程:fxml 编号 1 加载,然后单击和另一个加载)。

我已经在我的主类中将舞台设置为静态并一次又一次地使用它。

根据 ram 中堆栈空间的限制,这是个好主意吗?还是有更好的方法?

这些是我的代码的一部分:

public class Main extends Application {

public static Stage stage;
@Override
public void start(Stage primaryStage) throws Exception{
    stage=primaryStage;
    Parent root = FXMLLoader.load(getClass().getResource("MainWidget.fxml"));
    stage.setTitle("Welcome");
    stage.setScene(new Scene(root, 300, 275));
    stage.show();
}

而我的控制器是(正在加载另一个 fxml!!)

public void someButtonController{
            Parent root = FXMLLoader.load(getClass().getResource("/View/ShowWidget.fxml"));
            Scene scene =  new Scene(root,300,300);

            Main.stage.setScene(scene);
            Main.stage.show();}

【问题讨论】:

    标签: java static javafx stack stage


    【解决方案1】:

    我根本不会公开Stage。这样做会将您的 FXML-Controller 对与您的 Main 类耦合,并防止您在没有该类的情况下使用它。

    相反,做类似的事情

    @FXML
    private Button someButton ;
    
    // ...
    
    public void someButtonController{
        Window window = someButton.getScene().getWindow();
        if (window instanceof Stage) {
            Parent root = FXMLLoader.load(getClass().getResource("/View/ShowWidget.fxml"));
            Scene scene =  new Scene(root,300,300);
            Stage stage = (Stage) window ;
            stage.setScene(scene);
            stage.show(); // isn't it necessarily showing already?
        }
    }
    

    这里我假设控制器是代表Nodes 的FXML 文件的控制器,该文件显示在您尝试访问的Stage 中。如果不是这种情况,你仍然可以做类似的事情,尽管它会更复杂。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 2012-04-27
      • 2021-11-03
      • 2014-04-13
      相关资源
      最近更新 更多