单击按钮单击窗口中的javafx fxml文件,无需重复

时间:2017-05-04 16:41:39

标签: javafx fxml

我使用下面的代码在按钮单击事件的不同窗口中打开javafx fxml文件,它工作正常。但是如果我在窗口打开时再次单击相同的按钮,它将创建一个重复的窗口。是否有可能的解决方案来克服这个问题?提前谢谢。

Parent parent = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Stage stage = new Stage(StageStyle.DECORATED);
stage.setTitle("Title");

stage.setScene(new Scene(parent));
stage.show();

1 个答案:

答案 0 :(得分:1)

我偶然发现了这个老问题,并认为我可能会为JavaFX新手或一般编码的人解答(我很无聊..)。

在提供的代码(见下文)中,每次都会创建一个新的Stage,这意味着,如果该代码在方法内部运行,则每次在运行该代码时实际上都会创建一个新的Stage变量:

Stage stage = new Stage(StageStyle.DECORATED);

您可以做些什么,而不是在方法外创建Stage变量,这样您要么1.每次都覆盖它,要么2.进行一些“显示”或nullcheck或类似操作以查看是否应创建一个新Stage或如果只需要显示现有的。

例如:

private Stage stage;

private void onOpenNewStageBtnClicked(){
    if(stage == null){
        Parent parent = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
        stage = new Stage(StageStyle.DECORATED);
        stage.setTitle("Title");
        stage.setScene(new Scene(parent));
    }
    stage.show();
}

此外,我通常要做的是创建一个Stage工厂以避免很多重复的代码,这样我就可以拆分阶段的创建以及将fxml加载到控制器以外的其他类中。