【问题标题】:Getting most basic FXML custom control scenario to work in SceneBuilder让最基本的 FXML 自定义控制方案在 SceneBuilder 中工作
【发布时间】: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”,它确实可以工作。

【问题讨论】:

  • 远射,但是如果你使用&lt;?import tuto.TutoPane ?&gt; 然后只使用简单的类名&lt;TutoPane id="anchorPane" ... &gt; 会发生什么?
  • @James_D 当我按照你的建议进行时,SceneBuilder 拒绝打开并说java.lang.ClassNotFoundException: tuto.TutoPane
  • 据我所知,如果没有场景生成器中的 JAR,您将无法使用自定义(基于 Java 类)。使用标签&lt;?scenebuilder-classpath-element它只会加载现有的JAR文件,而不是类文件。

标签: javafx custom-controls netbeans-8 scenebuilder


【解决方案1】:

好吧,看起来我被互联网上的一些示例误导了,这些示例表明您可以通过在“scenebuilder-classpath”中的文件系统上引用它们各自的类文件来导入组件。

只有当我将我的类捆绑在一个 JAR 中并将这个 JAR 导入到自定义库文件夹中时,我的示例在 Scene Builder 中的设计时才有效。 “scenebuilder-classpath 元素”似乎与组件发现无关。

【讨论】:

    猜你喜欢
    • 2021-08-17
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    相关资源
    最近更新 更多