【发布时间】:2015-08-21 14:07:24
【问题描述】:
我试图弄清楚如何在 SceneBuilder 2.0 中打开基于 AnchorPane 的自定义组件的子类 - 我试图将问题减少到最基本的场景,即使在查看了 Oracle 文档之后我无法使其正常工作。我意识到 SO 上已经有其他问题,例如 this,但这些暗示使用 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 异常,我确实在主窗口中看到消息“无法显示此文档的内容”,并且当我在预览模式下显示消息时看到“不一个节点”。 “Not a Node”消息特别让我难过,因为 tuto.TutoPane 是 javafx.scene.layout.AnchorPane 的子类,因为 SceneBuilder 并没有抱怨找不到该类,它必须知道它是一个 Node .
如果我编辑 FXML 并将 tuto.TutoPane 替换为“AnchorPane”,它确实可以工作。
【问题讨论】:
-
远射,但是如果你使用
<?import tuto.TutoPane ?>然后只使用简单的类名<TutoPane id="anchorPane" ... >会发生什么? -
@James_D 当我按照你的建议进行时,SceneBuilder 拒绝打开并说
java.lang.ClassNotFoundException: tuto.TutoPane -
据我所知,如果没有场景生成器中的 JAR,您将无法使用自定义(基于 Java 类)。使用标签
<?scenebuilder-classpath-element它只会加载现有的JAR文件,而不是类文件。
标签: javafx custom-controls netbeans-8 scenebuilder