JavaFx SceneBuilder 2.0无法解析自定义控件

我有一个自定义JavaFx控件,在我的应用程序中呈现.但是,我无法让SceneBuilder理解它.

我有CustomTextField.java / CustomTextField.fxml. CustomTextField继承自UserControl,如here所定义,但我的场景构建器问题发生在我创建的任何自定义控件上.

首先,我必须将我的import语句更改为通配符.从

<import sample.CustomTextField>

<import sample.*>

否则,scenebuilder抛出一个异常/显示一个栈跟踪,表明无法找到源文件.我不知道为什么这是必要的,但似乎有效,所以我继续前进.

我已经读过你要在fxml文件中指定一个scenebuilder-classpath-element.所以,我尝试了我能想到的每一个组合:

<?scenebuilder-classpath-element ../../bin?>
<?scenebuilder-classpath-element ../../out?>
<?scenebuilder-classpath-element ../../../out?>
<?scenebuilder-classpath-element ./?>
<?scenebuilder-classpath-element ../../../../../target/classes?>

我的问题是自定义控件不会在Scene Builder中呈现.在层次结构树中选择它,它表示“选择包含未解析的引用”.如果我无法拖放自定义控件,那是可以接受的.但是,我真的想在Scene Builder中渲染它并布置其他东西.

我正在使用IntelliJ IDEA 14和Scene Builder 2.0

sample.fxml:

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

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import sample.*?>

<?scenebuilder-classpath-element ../../bin?>
<?scenebuilder-classpath-element ../../out?>
<?scenebuilder-classpath-element ../../../out?>
<?scenebuilder-classpath-element ./?>
<?scenebuilder-classpath-element ../../../../../target/classes?>

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Button fx:id="topButton" layoutY="2.0" mnemonicParsing="false" text="Button Top" />
       <CustomTextField fx:id="myCustomTextField" layoutX="1.0" layoutY="40.0" />
       <Button layoutX="1.0" layoutY="125.0" mnemonicParsing="false" text="Button Bot" />
   </children>
</Pane>

project structure
enter image description here

最佳答案
我可以加载自定义类.我们通过使用自定义类构建.jar来实现它,然后在SceneBuilder中,转到搜索库旁边的设置图标并导入自定义库.然后找到你的.jar.也许你可以用.class文件做同样的事情?

这是.fxml中的import语句:

<?import com.rlsciences.autoredact.view.ItemsTableView?>

这是我在.fxml中使用它的地方:

<ItemsTableView id="searchResultsTableView" fx:id="searchResultsTableView" fixedCellSize="20.0" styleClass="compact-table" VBox.vgrow="ALWAYS">

这是类定义:

package com.rlsciences.autoredact.view;
public class ItemsTableView<S> extends TableView<S>

转载注明原文:JavaFx SceneBuilder 2.0无法解析自定义控件 - 代码日志