为javafx场景生成器创建自定义组件

为javafx场景生成器创建自定义组件,javafx,scenebuilder,Javafx,Scenebuilder,我已经搜索了整个web(隐喻性地)以找到关于如何创建jar文件的解释,然后场景生成器可以导入该文件以添加额外的自定义组件。目前,我正在尝试创建一个带有文本字段的滑块,该字段显示其值,并使用NumberStringConverter创建一个双向链接。我已经把所有的类都设置好了,但是现在我需要把它们打包到一个jar文件中,而这部分对我来说并不适用。这些是课程: FXML: 现在的问题是:如何将这两个类导出到jar文件中,以便将其加载到场景生成器中 快速问题:我在同一个包中创建了一个新的FXML文件,

我已经搜索了整个web(隐喻性地)以找到关于如何创建jar文件的解释,然后场景生成器可以导入该文件以添加额外的自定义组件。目前,我正在尝试创建一个带有文本字段的滑块,该字段显示其值,并使用NumberStringConverter创建一个双向链接。我已经把所有的类都设置好了,但是现在我需要把它们打包到一个jar文件中,而这部分对我来说并不适用。这些是课程: FXML:

现在的问题是:如何将这两个类导出到jar文件中,以便将其加载到场景生成器中

快速问题:我在同一个包中创建了一个新的FXML文件,并尝试使用如下组件:

<AnchorPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.121" fx:controller="main.java.controller">
    <children>
        <valueSlider sliderPos="75"/>
    </children>
</AnchorPane>

但当我试图在IDE(intelliJ IDEA)中打开场景生成器时,它说:

无法在场景生成器中打开文件

java.lang.ClassNotFoundException:未解析的导入

javafx.fxml.LoadException:
/G:/GitHub/customParts/src/main/resources/test.fxml

但是它没有提供更多的信息,但是当我删除valueSlider组件时,它工作得非常好

如果你知道如何解决这个问题,请告诉我

提前感谢,


Lenardjee

值滑块
不应工作。您正在fxml中指定控制器,并为
FXMLLoader
设置
controller
属性。同时执行这两项操作将导致异常。。。顺便说一句:根据java命名约定,类型名称以大写字母开头……是的,没错,但这并不能解决问题。
public class valueSlider extends HBox {

    @FXML
    private TextField value;

    @FXML
    private Slider slider;

    private DoubleProperty sliderPos = new SimpleDoubleProperty();
    private DoubleProperty
            sliderMin = new SimpleDoubleProperty(),
            sliderMax = new SimpleDoubleProperty();

    public valueSlider() {
        try {
            FXMLLoader l = new FXMLLoader(getClass().getResource("valueSlider.fxml"));
            l.setController(this);
            l.setRoot(this);
            l.load();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

    @FXML
    private void initialize() {
        slider.minProperty().bindBidirectional(sliderMin);
        slider.maxProperty().bindBidirectional(sliderMax);
        slider.valueProperty().bindBidirectional(sliderPos);
        value.textProperty().bindBidirectional(sliderPos, new NumberStringConverter());
    }

    public double getSliderPos() {
        return sliderPos.get();
    }

    public DoubleProperty sliderPosProperty() {
        return sliderPos;
    }

    public void setSliderPos(double sliderPos) {
        this.sliderPos.set(sliderPos);
    }
}
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.121" fx:controller="main.java.controller">
    <children>
        <valueSlider sliderPos="75"/>
    </children>
</AnchorPane>