【问题标题】:How to embed all FXML nested controllers in one time?如何一次嵌入所有 FXML 嵌套控制器?
【发布时间】:2019-09-23 09:54:06
【问题描述】:

我正在编写一个 JavaFX 应用程序,我需要从我的视图中检索所有控制器(按钮、文本字段和颜色选择器)。

所以我创建了一个控制器类来加载所有控制器:

public class GeneralController extends BorderPane implements Initializable {

    @FXML private Button btnNew;
    @FXML private Button btnOpen;
    @FXML private Button btnSave;
    @FXML private Button btnShare;
    @FXML private Button btnHelp;
    @FXML private Button btnAbout;

    @FXML private ColorPicker clrSelectColor; 
    @FXML private Button btnPencil;
    @FXML private Button btnArrow;
    @FXML private Button btnCircle;
    @FXML private Button btnLine;
    @FXML private Button btnTriangle;
    @FXML private Button btnRectangle;
    @FXML private TextField nbcThickness;
    @FXML private Button btnConfirmThickness;

    @FXML private Button btnCropImg;
    @FXML private Button btnRotateImg;
    @FXML private Button btnInverseImg;

    @FXML private Canvas paintCanvas;
    private GraphicsContext gc;

    public GeneralController() {
        FXMLLoader fl = new FXMLLoader(getClass().getResource("/view/Window.fxml"));
         fl.setController(this);
         try {
             fl.load();            
         } catch (IOException exception) {
             throw new RuntimeException(exception);
         }

    }

问题是:加载 FXML 文件后,我所有的控制器引用都是空的(当然是因为控制器位于嵌套窗格中)。

FXML 文件树在这里:

(整个 FXML 文件:https://pastedb.io/paste/283be582-8624-4e13-71f8-838d6cbe15a7#fd3bdf271781a16f773b539ca30478f92ef7c8a9b228e7d630ee48c7eaf72a5f

如何加载我的所有控制器(窗格除外)而不必遍历每个嵌套容器? (每个控制器在所有应用程序上都有一个唯一的 ID)。

【问题讨论】:

  • 请同时显示您的 FXML 文件
  • 你也错过了 fl.setRoot(this);
  • 我试过 fl.setRoot(this) 但我得到了错误“根值已指定”

标签: java javafx fxml scenebuilder


【解决方案1】:

问题在于自加载的 FXML 配置不同。

所以你必须在设置控制器之前添加这一行:

fl.setRoot(this);

并在 FXML 中进行了更改:

<fx:root type="javafx.scene.layout.BorderPane" xmlns:fx="http://javafx.com/fxml">
  <top />
  <center />
(...)
</fx:root>

【讨论】:

    猜你喜欢
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多