JavaFX : Open a new FXML from another Java Class

标签 java javafx-2 fxml

我有一个包含以下文件的 JavaFx 应用程序:

  1. MainApp.java - 负责处理应用程序的 Java 类
  2. Controller.java - 相应的 Controller 文件
  3. Design.fxml - 应用程序的 FXML 文件,通过 MainApp.java 加载并由 Controller.java 控制

现在,假设我有另一个类文件 Compute.java,它有一个方法(比如 doSomething())。当此方法终止时,我希望在原始 FXML 文件之上打开一个内置警报框或自定义 FXML 文件(例如,一个标有“工作已完成”的框)。

请为此提出一个简洁的解决方案(这不涉及将 Compute.java 的逻辑移动到任何其他文件或 Controller.java。另外,我希望保持 Compute.java 中没有 JavaFx 代码)。

最佳答案

建议:

自从MainApp举行主要初级阶段(和场景)以来,
您可以将此类注入(inject)计算中

// 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 : Open a new FXML from another Java Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30706973/

相关文章:

java - Maven 构建期间出现 Lambda 错误

JavaFX FileChooser : how to set file filters?

JavaFX TextArea 和自动滚动

java - javafx 项目中的新类在尝试添加 if 语句时出现错误

当使用 fxml 作为 fxml 中的组件时,JavaFX FXML 没有正确地看到我的 Controller 方法 "Controller is not defined on root component"

java - 哪些流操作使用 `CONCURRENT` ,`IMMUTABLE` 和 `NONNULL` Spliterator 特性?

java - 更新命令行应用状态

java - Box2D 库 - 为什么当动态物体卡在静态物体和另一个动态物体之间时碰撞不能正常工作?

JavaFX 相当于 java.awt.EventQueue

java - 多个 FXML 文件,每个文件都有 Controller - TextArea 在附加后无法正确显示文本