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