背景说明
当我们使用一个表格来展示信息时,存在一个场景——查看或者编辑指定行的数据。
一般我们有以下几种操作方式:
直接在表格行尾添加一个编辑按钮
行首增加一个checkbox,选中后再点击表格上方或者下方的查看/编辑按钮
双击表格中的一行来响应事件
我这里简单的介绍第三种方式的实现方法。
双击事件
我假设你已经知道如何创建一个TableView了,在我们需要为添加列时,我们要对TableColumn的CellFactory进行设置。
我专门写一个方法来产生TableColumn:
private TableColumn getColumn(String columnName, String propertyName, int width, int maxWidth) {
TableColumn tableColumn = new TableColumn<>(columnName);
tableColumn.setCellFactory(new TaskCellFactory());
tableColumn.setCellValueFactory(new PropertyValueFactory<>(propertyName));
tableColumn.setMinWidth(width);
tableColumn.setPrefWidth(width);
tableColumn.setMaxWidth(maxWidth);
return tableColumn;
}
然后通过以下代码对产生的TableColumn进行使用:
TableColumn c = getColumn("任务标题", "taskName", 300, 1000);
在getColumn()这个方法中,我通过tableColumn.setCellFactory(new TaskCellFactory());设置了CellFactory。TaskCellFactory的内容如下:
private class TaskCellFactory implements Callback, TableCell> {
@Override
public TableCell call(TableColumn param) {
TextFieldTableCell cell = new TextFieldTableCell<>();
cell.setOnMouseClicked((MouseEvent t) -> {
if (t.getClickCount() == 2) {
view();
}
});
//cell.setContextMenu(taskContextMenu);
return cell;
}
}
整个实现的核心就在于重点就在于实现Callback, TableCell>然后返回JavaFX API自带的TextFieldTableCell。并在call()方法中,为cell增加了双击事件的处理。在我的实现中,双击时会调用view()方法来实现查看的逻辑。
在这里你可以做你想做的其他效果,比如为表格设置上下文菜单,右键时显示查看/删除等。