首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在intelliJ中向FXML场景生成器添加自定义组件

在intelliJ中向FXML场景生成器添加自定义组件
EN

Stack Overflow用户
提问于 2018-06-27 13:44:32
回答 1查看 2.7K关注 0票数 2

我想在intelliJ中向javafx场景生成器添加一个自定义组件/自定义组件。我目前正在使用java8.1。我听说用java 10向场景生成器添加组件是可能的,因为它有Java2.0。我已经安装了java 10,但我不知道如何切换到那个版本的java。如果你知道怎么解决这个问题,我很想听听。

提前谢谢你,

勒纳迪

编辑:我明白为什么这个问题是模拟其他帖子,因为直接的问题是直接添加自定义组件到场景生成器。然而,这个问题存在的一个根本原因是,我在intelliJ中使用了编辑器,而该编辑器用于JavaFX1.0左右,JavaFX2.0的编辑器支持添加自定义组件的功能,这是java 10中的编辑器。现在真正的问题是:如何在intelliJ中更新场景生成器?我已经安装了java 10,但是我的项目仍然在使用java8.1,我不知道如何修改它。我希望这解释了为何我的问题是相关的,而不是重复的。谢谢你阅读这个比最初问题更长的解释;p

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-28 11:24:23

我希望能够创建一个java类,扩展Pane左右,然后将子级和操作分配给它,比如在它旁边有一个textfield的slidebar,显示值。我知道在场景构建器应用程序中,通过将带有类和依赖项的jar文件直接导入场景生成器,这是可能的,但我不知道如何在intelliJ中的场景生成器中做到这一点。

您使用Scene Builder的方式没有什么不同。您只需在用户控件中添加属性(如果属性不是只读的,则使用getter和setter)。在这种情况下,属性将出现在Scene Builder检查器中,您可以通过它们或直接编辑FXML文件来操作它们。

下面是一个示例(java 8,但这与此无关)

mycontrol.fxml

代码语言:javascript
运行
复制
<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>
代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
<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>

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51064426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档