在单独的类中初始化第二个窗口(例如ChoiceBox)

时间:2017-12-14 16:47:33

标签: java javafx initialization window

我有两个窗口控制器,它们都加载FXML文件并显示一个屏幕。第一个,GUIController是主窗口,它产生第二个窗口,PackageBuilder,用户在其中输入一些数据并存储。

第二个窗口是通过主窗口中的Button生成的(FXML链接):

@FXML private void onNewPackage(ActionEvent e){
    PackageBuilder pb = new PackageBuilder(owner); // Scene owner
}

我认为第二个类不能调用JavaFX Application启动方法,并且需要传递原始场景。所以我在PackageBuilder中写了这个:

public PackageBuilder(Scene owner) {
    /* Removed redundant setup info */
    fstart(owner);
}
private void fstart(owner) {
    Stage window = new Stage();
    window.initModality(Modality.APPLICATION_MODAL);
    FXMLLoader loader;
    Scene scene;
    try {
        loader = new FXMLLoader(getClass().getResource("PackageBuilder.fxml"));
        scene = new Scene(loader.load());
        window.initOwner(owner);
        window.setScene(scene);
        window.showAndWait();
    } catch (IOException e) {
        e.printStackTrace();
    }   
}

如果可以调用initialize-method,这一切都会很好。但它无法实现。那么有没有办法在其他任何地方初始化ChoiceBox的元素?

我假设某处有一个愚蠢的错误。总是有。

1 个答案:

答案 0 :(得分:-1)

要初始化ChoiceBox的第二个类可以实现一个接口:

public class PackageBuilder implements Initializable{
    @Override
    public void initialize(URL url, ResourceBundle rb){
        /* Initialize things needed */
    }
}

在类的构造函数之前调用该方法。