您的位置:首页 > 编程语言 > Java开发

为TableView的行实现双击事件

2015-10-16 08:30 435 查看


背景说明

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

一般我们有以下几种操作方式:
直接在表格行尾添加一个编辑按钮
行首增加一个checkbox,选中后再点击表格上方或者下方的查看/编辑按钮
双击表格中的一行来响应事件

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


双击事件

我假设你已经知道如何创建一个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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息