Добавить пользовательский компонент в конструктор сцен FXML в intelliJ - PullRequest
0 голосов
/ 27 июня 2018

Я хочу добавить пользовательский компонент / пользовательские компоненты в конструктор сцены javafx в intelliJ. В настоящее время я использую Java 8.1. Я слышал, что добавление компонентов в конструктор сцены возможно с Java 10, потому что он имеет Java 2.0. У меня установлена ​​Java 10, но я не знаю, как перейти на эту версию Java. Так что, если вы знаете, как решить эту проблему, я хотел бы услышать это.

Заранее спасибо,

Lenardjee

Edit: Я понимаю, почему эта проблема похожа на другие посты, так как прямой проблемой является непосредственное добавление пользовательского компонента в конструктор сцены. Тем не менее, эта проблема имеет основную причину для существования, а именно тот факт, что я использую редактор в intelliJ, и этот редактор предназначен для javafx 1.0 или около того, и функция добавления пользовательских компонентов поддерживается редактором для javafx 2.0, который находится в Java 10. Теперь реальная проблема заключается в следующем: как мне обновить конструктор сцены в intelliJ? Я уже установил Java 10, но мой проект все еще использует Java 8.1, и я не знаю, как это изменить. Я надеюсь, это объясняет, почему мой вопрос является актуальным, а не дубликатом. Спасибо за прочтение этого объяснения, которое длиннее исходного вопроса; p

1 Ответ

0 голосов
/ 28 июня 2018

Я хочу иметь возможность создать класс Java, расширяющий Pane или около того, а затем назначить ему дочерние элементы и действия, такие как ползунок с текстовым полем рядом с ним, показывающий значение. Я знаю, что в приложении конструктора сцены это возможно, импортировав файл jar с классом и зависимостями прямо в конструктор сцены, но я не знаю, как это сделать в конструкторе сцены в intelliJ.

Нет никакой разницы в том, как вы используете Scene Builder. Вы просто добавляете свойства в пользовательский элемент управления (с геттерами и сеттерами, если свойство не только для чтения). В этом случае свойства появятся в инспекторе Scene Builder, и вы сможете манипулировать ими либо непосредственно, либо непосредственно редактируя файл FXML.

Вот пример (Java 8, но это не имеет значения)

mycontrol.fxml

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

public class MyControl extends HBox {

    @FXML
    private Label label;

    @FXML
    private Slider slider;

    private StringProperty labelName = new SimpleStringProperty();
    private DoubleProperty sliderPos = new SimpleDoubleProperty();

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

    @FXML
    private void initialize() {
        slider.setMin(0.0);
        slider.setMax(100.0);

        label.textProperty().bindBidirectional(labelName);
        slider.valueProperty().bindBidirectional(sliderPos);
    }

    public String getLabelName() {
        return labelName.get();
    }

    public StringProperty labelNameProperty() {
        return labelName;
    }

    public void setLabelName(String labelName) {
        this.labelName.set(labelName);
    }

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

    public DoubleProperty sliderPosProperty() {
        return sliderPos;
    }

    public void setSliderPos(double sliderPos) {
        this.sliderPos.set(sliderPos);
    }
}

И это сцена, в которой используется этот пользовательский элемент управления

sample.fxml

<AnchorPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.121" fx:controller="sample.Controller">
    <MyControl labelName="Test name" sliderPos="25.0" />
</AnchorPane>

And this is the working view in IntelliJ

...