本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

在 javaFX 中使 Stage 静态。这是不是一个好主意?

发布于2023-11-05 21:52     阅读(1147)     评论(0)     点赞(16)     收藏(4)


我实际上想构建一个从一个 fxml 到另一个 fx 应用程序(使用此过程: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();}

解决方案


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

相反,做类似的事情

@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?
    }
}

在这里,我假设控制器是 FXML 文件的控制器,该文件代表您尝试访问的Node中显示的 s 。Stage如果情况并非如此,您仍然可以执行类似的操作,尽管会更复杂。



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/677460/a7770aa569186fc43592/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

16 0
收藏该文
已收藏

评论内容:(最多支持255个字符)