javafx2.0 在表格(TableView)中显示选择按钮(CheckBox)
?
?
要在JFX的表格中显示自定义的单元(TableCell), 必须实现一个继承于javafx.scene.control.TableCell的自定义单元. ?JFX官方没有为TableView提供像列表/选项按钮/文本框这样的常用控件, 如果你需要这些控件, 可以在另外一个项目中下载这些控件. 参见:http://www.javafxdata.org?.(以下代码的实现参考了www.javafxdata.org)
?
首先定义一个TableCell来显示CheckBox.
?
??
定义一个用于测试的实体类.?
?
TableColumn<Goods, Boolean> availableColumn=new TableColumn<Goods, Boolean>("是否有效");col.setCellValueFactory(new PropertyValueFactory<Goods,Boolean>("available");col.setCellFactory(CellFactory.tableCheckBoxColumn(new Callback<Integer, ObservableValue<Boolean>>() {@Overridepublic ObservableValue<Boolean> call(Integer index) {final Goods g= table.getItems().get(index);ObservableValue<Boolean> retval = new SimpleBooleanProperty(g,"available",g.getAvailable());retval.addListener(new ChangeListener<Boolean>() {@Overridepublic void changed(ObservableValue<? extends Boolean> observable,Boolean oldValue, Boolean newValue) {g.setAvailable(newValue);}});return retval;}}));TableColumn<Goods, Boolean> hotSaleColumn=new TableColumn<Goods, Boolean>("是否热销");col.setCellValueFactory(new PropertyValueFactory<Goods,Boolean>("hotSale");col.setCellFactory(CellFactory.tableCheckBoxColumn());??
上面两个列使用不同的绑定方法. 第一列"是否有效"对应Goods中的boolean属性available. 该属性不支持JFX的动态绑定, 所以在定义列的时候建立一个Callback来动态更新属性.
第二个列"是否热销"对应Goods的boolean属性hotSaleProperty. 该属性支持JFX的动态绑定, 在定义列时无需做任何修改就可以实现实体与表格的绑定.
从上面的例子也可以看到, 在新版的JFX中, 如果实体类原生支持JFX的绑定类型在实现数据绑定会方便很多.
?
以上是JFX中自定义单选框的实现. 关于列表(ListView)和树(TreeView)的实现也类似.
?
参考阅读:
JFX的数据绑定:http://docs.oracle.com/javafx/2.0/binding/jfxpub-binding.htm
用于数据绑定的JFX框架:?http://www.javafxdata.org
?
?
?
?
?
?
?
?
?
?