JavaFX 8处理非模态和模态对话框的方法

时间:2017-02-11 19:20:08

标签: java javafx javafx-8

需要在Java FX应用程序中处理非模态和模态对话框的方法。

主要和对话阶段必须合理,否则JavaFX将无法运行。

在接受用户提供的输入之前,所有模态对话框都需要验证 DRY应该完全有效。

为了避免单片意大利面条代码,SceneBuilder也应该起作用。

我已经浏览过互联网,但找不到任何这样的JavaFX方法。

创建这样的JavaFX方法需要哪些注意事项?

结果代码包含什么?

如何调用和使用这种方法?

1 个答案:

答案 0 :(得分:0)

以下评论部分的回复。

    /**
     * @author Arch Brooks, CEO Brooks Computing Systems, LLC authored this
     *         method.<br>
     * 
     * @since February 8, 2017<br>
     * 
     * @param panel
     *            The fxml document to serve as the dialog.
     * @param css
     *            The cascading style sheet used by the dialog.
     * @param caption
     *            The dialog caption or title.
     * @param moDal
     *            Identifies modality true = modal otherwise non modal. <br>
     *          <br>
     *            This method should be placed in the primary java class. <br>
     *          <br>
     *            Place the following calling sequence in the start constructor
     *            of the FX application. <br>
     *          <br>
     *            ShowTopFormDlg("Your.fxml", "Your.css", "Your Title", false);
     *            <br>
     *          <br>
     *            Place the following calling sequence in the controller when a
     *            modal dialog is desired. <br>
     *          <br>
     *            ShowTopFormDlg("Your.fxml", "Your.css", "Your Title", true);
     *            <br>
     *          <br>
     *            Globals in the JavaFX class housing the start constructor are
     *            as follows: <br>
     *          <br>
     *            public static FXMLLoader loader;<br> 
     *            public static Stage dialogStage;<br>
     *            public static BorderPane page;<br>
     *            private static BorderPane mainLayout;<br>
     *            public static Scene scene;<br>
     *            public static Stage dialogStage;<br>
     *            public static Stage primaryStage;<br>
     *            <br>
     *          <br>
     *            In any controller using this calling sequence the following
     *            import is required. <br>
     *          <br>
     *            import com.bcs.FXDlgTest2.*; 
     */

    public static void ShowTopFormDlg(String panel, String css, String caption, Boolean moDal) {
        loader = new FXMLLoader();
        loader.setLocation(TopForm_so.class.getResource(panel));
        if (moDal) {
            dialogStage = new Stage();
            try {
                page = loader.load();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } else {
            try {
                mainLayout = loader.load();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if (moDal) {
            scene = new Scene(page);
        } else {
            scene = new Scene(mainLayout);
        }
        scene.getStylesheets().add((TopForm_so.class.getResource(css).toExternalForm()));
        if (moDal) {
            dialogStage.setScene(scene);
            dialogStage.setTitle(caption);
            dialogStage.initModality(Modality.WINDOW_MODAL);
            dialogStage.showAndWait();
        } else {
            primaryStage.setScene(scene);
            primaryStage.setTitle(caption);
            primaryStage.show();
        }
    }