Javafx:从另一个 Java 打开一个新的 FXML Class
Javafx: Open a new FXML from another Java Class
我有一个包含以下文件的 JavaFx 应用程序:
- MainApp.java - Java class 负责处理申请
- Controller.java - 对应控制器文件
- Design.fxml - 通过 MainApp.java 加载并由 Controller.java
控制的应用程序的 FXML 文件
现在,假设我有另一个 class 文件 Compute.java,它有一个方法(比如 doSomething())。当此方法终止时,我希望在原始 FXML 文件之上打开一个内置警报框或自定义 FXML 文件(例如,一个显示 "Work Completed" 的框)。
请为此提出一个巧妙的解决方案(不涉及将 Compute.java 的逻辑移动到任何其他文件或 Controller.java。另外,我希望保留 Compute.java 清除 JavaFx 代码)。
建议:
自从主要的初级阶段(和场景)在MainApp举行以来,
你可以将这个 class 注入 Compute
// in MainApp.java
Compute compute = new Compute();
compute.setMainApp(this);
之后你打电话
// in Compute.java
mainApp.showAlert(myTitle, myContent);
哪里
// in MainApp.java
public void showAlert(String myTitle, Node myContent) {
Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle(myTitle);
alert.setHeaderText(null);
alert.getDialogPane.setContent(myContent);
alert.showAndWait();
}
// or your custom stage
public void showAlert(String myTitle, Node myContent) {
Stage dialogStage = new Stage();
dialogStage.initModality(Modality.WINDOW_MODAL);
dialogStage.setScene(new Scene(new VBox(new Label(myTitle), myContent));
dialogStage.show();
}
我有一个包含以下文件的 JavaFx 应用程序:
- MainApp.java - Java class 负责处理申请
- Controller.java - 对应控制器文件
- Design.fxml - 通过 MainApp.java 加载并由 Controller.java 控制的应用程序的 FXML 文件
现在,假设我有另一个 class 文件 Compute.java,它有一个方法(比如 doSomething())。当此方法终止时,我希望在原始 FXML 文件之上打开一个内置警报框或自定义 FXML 文件(例如,一个显示 "Work Completed" 的框)。
请为此提出一个巧妙的解决方案(不涉及将 Compute.java 的逻辑移动到任何其他文件或 Controller.java。另外,我希望保留 Compute.java 清除 JavaFx 代码)。
建议:
自从主要的初级阶段(和场景)在MainApp举行以来,
你可以将这个 class 注入 Compute
// in MainApp.java
Compute compute = new Compute();
compute.setMainApp(this);
之后你打电话
// in Compute.java
mainApp.showAlert(myTitle, myContent);
哪里
// in MainApp.java
public void showAlert(String myTitle, Node myContent) {
Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle(myTitle);
alert.setHeaderText(null);
alert.getDialogPane.setContent(myContent);
alert.showAndWait();
}
// or your custom stage
public void showAlert(String myTitle, Node myContent) {
Stage dialogStage = new Stage();
dialogStage.initModality(Modality.WINDOW_MODAL);
dialogStage.setScene(new Scene(new VBox(new Label(myTitle), myContent));
dialogStage.show();
}