【问题标题】:JavaFX binding in initialize method初始化方法中的 JavaFX 绑定
【发布时间】:2018-11-13 09:37:11
【问题描述】:

我正在尝试创建一个绑定,以便为按钮提供一种在列表视图包含或不包含项目时禁用/启用自身的方法。但是,我没有让它工作。 这是我的初始化方法

private void initialize(){
    runButton.disableProperty().bind(Bindings.isEmpty(listView.getItems());
}

向 listView 添加项目对按钮的禁用/启用状态没有任何影响。

如果我将上面的代码行放在程序中稍后调用的另一个随机函数中,它就可以工作。

我了解到绑定可能会被垃圾回收,因此我还尝试创建绑定字段,然后将其应用于 disabledProperty。这也不起作用。

有什么想法吗?

编辑:

listView.setItems(observableFiles)

用于填充列表

【问题讨论】:

  • 您是否在您的代码中将@FXML 注释添加到您的initialize 方法中?通过对其进行调试,您确定在打开窗口时会调用此绑定吗?
  • 是的,绑定是在窗口打开之前调用的。

标签: javafx


【解决方案1】:

您是否在代码中的任何位置调用listView.setItems()?如果是这样,那将解释为什么当您将其放入 initialize 时它不起作用,因为您绑定到旧列表对象,而 ListView 正在使用新列表对象。

编辑:刚刚看到您的编辑,看来您确实这样做了。调用 setItems 后尝试调用绑定。

【讨论】:

  • OP 可能还想观察ListViewitems 属性以根据需要重新绑定,具体取决于是否会在某个时候再次调用setItems
  • 谢谢!我没有意识到 listView.setItems() 交换了整个支持列表。我通过获取支持 listView 的原始列表来解决它,然后从该列表中添加/删除项目。这样我就不用调用 listView.setItems() 了。
【解决方案2】:

作为另一种选择,您可以将侦听器添加到 ListView itemsProperty,如果更改的列表为空,则在 runButton 上触发禁用。

【讨论】:

    猜你喜欢
    • 2013-02-24
    • 2016-12-22
    • 2017-04-22
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    相关资源
    最近更新 更多