让最基本的 FXML 自定义控件场景在 SceneBuilder 中工作

Getting most basic FXML custom control scenario to work in SceneBuilder

我正在尝试弄清楚如何在 SceneBuilder 2.0 中打开基于 AnchorPane 的自定义组件的子class - 我试图将问题减少到最基本的场景,甚至在查看之后在 Oracle 文档中,我无法使它正常工作。我意识到还有其他问题,例如 已经在 SO 上,但这些暗示使用了 JAR,我没有 JAR。

这只是简单的事情,我做错了什么?

TutoPane.java:

package tuto;

public class TutoPane extends javafx.scene.layout.AnchorPane {

}

Atut.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?scenebuilder-classpath-element ../../build/classes?>


<tuto.TutoPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" fx:controller="tuto.AtutController">

</tuto.TutoPane>

当我在 SceneBuilder 中打开 fxml 文件时,我没有收到 ClassNotFound 异常,我确实在主要 window 中看到了消息 "Content of this document cannot be displayed" 并且当我在预览模式下显示时看到了消息"Not a Node"。 "Not a Node" 消息尤其让我难过,因为 tuto.TutoPane 是 javafx.scene.layout.AnchorPane 的子 class,因为 SceneBuilder 没有抱怨找不到 class ,它必须知道它是一个节点。

如果我编辑 FXML 并将 tuto.TutoPane 替换为 "AnchorPane" 它确实有效。

好吧,我似乎被 Internet 上的一些示例误导了,这些示例表明您可以通过在 [=14] 中的文件系统中引用它们各自的 class 文件来导入组件=].

只有当我将 classes 捆绑在 JAR 中并将此 JAR 导入自定义库文件夹时,我的示例才能在设计时在 Scene Builder 中运行。 "scenebuilder-classpath element" 似乎与组件发现完全无关。