未能进入对话阶段

时间:2017-06-21 11:54:14

标签: javafx javafx-8

http://code.makery.ch/blog/javafx-dialogs-official/展示了如何获得JavaFX-8对话框的阶段:

// Get the Stage.
Stage stage = (Stage) dialog.getDialogPane().getScene().getWindow();

唉,这对我不起作用:对话窗格(虽然显示)在null上显示.getScene()

有没有其他简单的方法来获得舞台或至少是一个打开的对话窗口的场景?

问题的背景是,在某些情况下,需要在保持底层对话框窗口打开的同时向用户显示Alert。目前,由于Modality值的组合无效,这不起作用,但这是一个不同的主题。

1 个答案:

答案 0 :(得分:3)

如果你没有发布上下文代码,我很难肯定地说,但我认为问题在于时机。你需要在showAndWait之前(或至少在对话框关闭之前)获得舞台。试试这个:

public static boolean showConfirmationDialog(String contentText, String headerText) {
    Alert alert = new Alert(Alert.AlertType.CONFIRMATION, contentText, ButtonType.YES, ButtonType.NO);
    alert.setTitle("Test");
    alert.setHeaderText(headerText);

    Window alertWindow = alert.getDialogPane().getScene().getWindow();
    System.out.println("alertWindow.getOpacity(): " + alertWindow.getOpacity());

    Optional<ButtonType> result = alert.showAndWait();

    //This would cause a NullPointerException at this point:
    //alertWindow = alert.getDialogPane().getScene().getWindow();
    //System.out.println("alertWindow.getOpacity(): " + alertWindow.getOpacity());

    return (result.get() == ButtonType.YES);
}