为TableView的行实现双击事件

背景说明

当我们使用一个表格来展示信息时,存在一个场景——查看或者编辑指定行的数据。

一般我们有以下几种操作方式:

  1. 直接在表格行尾添加一个编辑按钮
  2. 行首增加一个checkbox,选中后再点击表格上方或者下方的查看/编辑按钮
  3. 双击表格中的一行来响应事件

我这里简单的介绍第三种方式的实现方法。

双击事件

我假设你已经知道如何创建一个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()方法来实现查看的逻辑。

在这里你可以做你想做的其他效果,比如为表格设置上下文菜单,右键时显示查看/删除等。


http://www.alanzeng.cn/2015/10/tableview-double-click/

你可能感兴趣的:(Java,FX2)