CheckBoxTableCell changelistener无法正常工作

CheckBoxTableCell changelistener无法正常工作,第1张

CheckBoxTableCell changelistener无法正常工作

selectedProperty
是从继承
Cell
,它只是指示是否
Cell
在UI部件中选择。由于您可能没有启用单元格选择
TableView
,因此该单元格永远不会被选中。无论如何,这都不是您要找的东西。您想知道是否
CheckBox
选择,而不是
Cell

这里的技巧是使用的

selectedStateCallback
属性
CheckBoxTableCell
。此函数将单元格的索引映射到
BooleanProperty
。这
BooleanProperty
是双向绑定的复选框的选中状态。

如果您的列表示类中的实际属性

Trainee
(我将其称为
selectedProperty
演示),则可以执行以下 *** 作:

final CheckBoxTableCell<Trainee, Boolean> ctCell = new CheckBoxTableCell<>();ctCell.setSelectedStateCallback(new Callback<Integer, Observablevalue<Boolean>>() {    @Override    public Observablevalue<Boolean> call(Integer index) {        return table.getItems().get(index).selectedProperty();    }});

然后,将

Trainee
类中的属性与复选框状态双向绑定。如果您需要做的事情不仅仅是在选中/取消选中复选框时更新模型对象,则可以观察该属性。

如果您在

Trainee
类中没有属性,则可以创建一个
BooleanProperty
并观察它:

final CheckBoxTableCell<Trainee, Boolean> ctCell = new CheckBoxTableCell<>();final BooleanProperty selected = new SimpleBooleanProperty();ctCell.setSelectedStateCallback(new Callback<Integer, Observablevalue<Boolean>>() {    @Override    public Observablevalue<Boolean> call(Integer index) {        return selected ;    }});selected.addListener(new ChangeListener<Boolean>() {    @Override    public void changed(Observablevalue<? extends Boolean> obs, Boolean wasSelected, Boolean isSelected) {        System.out.println(isSelected);    }});

像往常一样,所有这些代码在Java 8中看起来都更好。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5479198.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存