读书人

javafx2.0 在报表(TableView)中显示选

发布时间: 2012-08-27 21:21:57 作者: rapoo

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

?

?

?

?

?

?

?

?

?

?

读书人网 >编程

热点推荐