在我的Java桌面应用程序中,我有一个TableView,其中我想要一个包含CheckBoxes的列 .
我确实找到了这个已经完成的地方http://www.jonathangiles.net/javafx/2.0/CellFactories/但是由于下载不可用而且因为我不知道't know how soon Jonathan Giles will answer my email I thought I'问...
如何将CheckBox放入TableView的单元格中?
在我的Java桌面应用程序中,我有一个TableView,其中我想要一个包含CheckBoxes的列 .
我确实找到了这个已经完成的地方http://www.jonathangiles.net/javafx/2.0/CellFactories/但是由于下载不可用而且因为我不知道't know how soon Jonathan Giles will answer my email I thought I'问...
如何将CheckBox放入TableView的单元格中?
13 回答
您需要在TableColumn上设置CellFactory .
例如:
使用javafx.scene.control.cell.CheckBoxTableCell<S,T>并完成工作!
UPDATE: 使用Java 8 lambda expressions的相同代码
行数除以2! (16 ==> 8)
UPDATE: 使用Java 10 "var" contextual word的相同代码
EDIT to add full functional editable example (Java 8)
EDIT to add full functional editable example (Java 10)
最简单的解决方案可能是在FXML中做到这一点:
您还需要在FXML中添加导入,例如
<?import com.assylias.factories.*?>
额外奖励:您可以通过向
CheckBoxCellFactory
类添加字段来使工厂更具可自定义性,例如确定复选框的显示位置,例如:和FXML:
小而简单 .
有一种非常简单的方法,您不需要使用SimpleBooleanProperty或其他任何方式修改模型类,只需按照以下步骤操作:
1 - Suppose you have a "Person" object with a isUnemployed method:
2 - Create the callback class
3 - Bind the callback to the table column
If you use FXML, put the callback class inside your column:
不要忘记在FXML中导入该类:
Without FXML, do it like this:
4 - That's it
一切都应该按预期工作,当您单击复选框时将值设置为支持bean,并在您的表中加载项目列表时正确设置复选框值 .
为了将EDITABLE复选框链接到模型,最简单的解决方案是:
假设您有一个带有两个字段的
Person
模型类,"name"字符串和"selected"布尔值:你在控制器中所要做的就是:
这是一个完整的工作示例,展示了如何使模型与视图保持同步.....
这就是这样做的方式
cb.setFocusTraversable(false)是必要的,以防止焦点卡在上面 .
setGraphic(null)必须删除删除项目后或源列表更改时遗留的任何内容
cb.selectedProperty() . addListener((obs,old,niu) - >(你的东西......));这是您捕获CheckBox的新值并随意执行任何操作的地方 .
另一个是ToggleGroup和ToggleButtons
我做了一些测试和内存消耗与使用ComboBoxTableCell基本相同
这就是我的小应用程序的外观(sry,我的主要语言是西班牙语,我 Build 它供个人使用)
受到以前答案的启发,我认为这是最短的版本 .
这最终为我工作(注意我的模型中的对象是
Candidate
并且复选框确定它们是否被排除,因此isExcluded()
):这是第三方的lib,它会做到http://www.jonathangiles.net/javafx/2.0/CellFactories/docs/api/net/jonathangiles/javafx/control/cell/tableview/CheckBoxTableCell.html
对我来说,使用此解决方案:
和tableCell:
如果您不需要使用编辑事件制作复选框