создать пользовательский компонент для конструктора сцены javafx - PullRequest
0 голосов
/ 28 июня 2018

Я искал всю сеть (в переносном смысле), чтобы найти объяснение того, как создать файл 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

...