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

问题描述:

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

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

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

为了避免单体意大利面代码,SceneBuilder也应该发挥作用。

我已经搜遍了互联网,但找不到任何这样的JavaFX方法。

创建这种JavaFX方法需要考虑什么?

生成的代码包含什么?

如何调用和使用这样的方法?

下面的评论部分的回应。

/** 
    * @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(); 
     } 
    }