为TableView的行实现双击事件

来源:互联网 发布:linux 删除文本前n行 编辑:程序博客网 时间:2024/05/17 07:24

背景说明

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

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

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

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

双击事件

我假设你已经知道如何创建一个TableView了,在我们需要为添加列时,我们要对TableColumn的CellFactory进行设置。

我专门写一个方法来产生TableColumn:

private TableColumn<Task, String> getColumn(String columnName, String propertyName, int width, int maxWidth) {    TableColumn<Task, String> 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<TableColumn<Task, String>, TableCell<Task, String>> {    @Override    public TableCell<Task, String> call(TableColumn<Task, String> param) {        TextFieldTableCell<Task, String> cell = new TextFieldTableCell<>();        cell.setOnMouseClicked((MouseEvent t) -> {            if (t.getClickCount() == 2) {                view();            }        });        //cell.setContextMenu(taskContextMenu);        return cell;    }}

整个实现的核心就在于重点就在于实现Callback<TableColumn<Task, String>, TableCell<Task, String>>然后返回JavaFX API自带的TextFieldTableCell。并在call()方法中,为cell增加了双击事件的处理。在我的实现中,双击时会调用view()方法来实现查看的逻辑。

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


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

0 0