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

时间:2018-06-28 20:06:44

标签: javafx scenebuilder

我已经(隐喻地)搜索了整个网络,以找到有关如何创建jar文件的说明,然后可以由场景构建器将其导入以添加额外的自定义组件。当前,我正在尝试创建一个带有textField的滑块,该滑块显示其值,并使用NumberStringConverter使用双向链接。我已经设置了所有类,但是现在我需要将它们捆绑在一个jar文件中,这对我不起作用。这些是类: FXML:

<fx:root type="javafx.scene.layout.HBox" xmlns="http://javafx.com/javafx" 
xmlns:fx="http://javafx.com/fxml" fx:controller="main.java.valueSlider">
    <Slider fx:id="slider" HBox.hgrow="ALWAYS"/>
    <Label fx:id="label" text="value"/>
</fx:root>

现在,我可以导入该FXML文件并将其用作创建带有标签的滑块的快捷方式,但是我希望有一个用于双向链接的控制器。这是控制器类:

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);
    }
}

现在的问题是:如何将这两个类导出到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)中打开场景生成器时,它说:

  

无法在Scene Builder中打开文件
  
  java.lang.ClassNotFoundException:无法解析的导入
  
  javafx.fxml.LoadException:
  /G:/GitHub/customParts/src/main/resources/test.fxml

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

如果您知道如何解决此问题,请告诉我。

预先感谢

Lenardjee

0 个答案:

没有答案