【问题标题】:JavaFX custom controls with @NamedArgs: Cannot bind to untyped object带有@NamedArgs 的JavaFX 自定义控件:无法绑定到无类型对象
【发布时间】:2017-10-30 23:40:31
【问题描述】:

我想创建一个带有两个自定义控件的 FXML 应用程序,其中一个需要引用另一个。

第一个类通过构造函数参数获取对第二个类的引用。这在带有@NamedArgs 注释的 FXML 中也可用。

public SelectWeekControl(@NamedArg("dayControl") SelectDayControl selectDayControl) {
    this.selectDayControl = selectDayControl;
    ...
}

现在我想通过引用 @NamedArgs 字段和另一个组件的 fx:id 来将两者都添加到 FXML 文件中。

<SelectDayControl fx:id="daySelect"/>
<SelectWeekControl dayControl="${daySelect}" fx:id="weekSelect"/>

不幸的是,第二行失败并显示以下错误消息:

原因:javafx.fxml.LoadException:无法绑定到无类型对象。

唯一提到同一问题的other question 的答案并不令人满意。

【问题讨论】:

    标签: javafx-8 fxml fxmlloader


    【解决方案1】:

    我不知道为什么你尝试的代码不起作用,但以下版本似乎可以正常工作:

    <SelectWeekControl fx:id="selectWeekControl">
        <selectDayControl>
            <SelectDayControl fx:id="selectDayControl" />
        </selectDayControl>
    </SelectWeekControl>
    

    并且(如果您需要在 FXML 文件中的其他位置定义的 SelectDayControl)也可以

    <SelectDayControl fx:id="selectDayControl" />
    
    <SelectWeekControl fx:id="selectWeekControl">
        <selectDayControl>
            <fx:reference source="selectDayControl" />
        </selectDayControl>
    </SelectWeekControl>
    

    【讨论】:

    • 酷,谢谢,它有效!但我想为其他有同样问题的人添加更多信息:SelectDayControl 必须在 before SelectWeekControl 之前定义,虽然第二种方法是有效的,但 IntelliJ 用红色突出显示它并说“无法解析符号”
    猜你喜欢
    • 1970-01-01
    • 2016-07-17
    • 2014-10-26
    • 2014-06-24
    • 2021-08-12
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    相关资源
    最近更新 更多