TaleCell
对TableColumn的cell里面弄重新构造
TableColumn的setCellFactory(TextFieldTableCell.forTableColumn());有一些默认的构造。
或者重写TableCell类
-
tableColumn.setCellFactory(new Callback<TableColumn<Path, Number>, TableCell<Path, Number>>() {
-
@Override
-
public TableCell<Path, Number> call(TableColumn<Path, Number> param) {
-
return new MyTableCell<Path, Number>();
-
}
-
}
Tablecell里面不仅只存放文字,还可以存放其它Node,需要重写TableCell的update(T
t,boolean empty)方法编辑单元格可以使用重写startEdit()和cancelEdit()
-
class MyTableCell<Path, Node> extends TableCell<Path, Node> {
-
protected void updateItem(Node node,boolean empty) {
-
super.updateItem(node, empty);
-
if (empty||node==null) {
-
setText(null);
-
setGraphic(null);
-
else {
-
setText(null);
-
setGraphic(node);
-
}
-
}
-
@Override
-
public void startEdit() {
-
super.startEdit();
-
-
-
-
}
-
-
-
@Override
-
public void cancelEdit() {
-
super.cancelEdit();
-
-
-
-
}
-
}
双击鼠标监听
通过tableColumn.setCellFactory(new TaskCellFactory());设置了CellFactory。
TaskCellFactory的内容如下:
-
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) {
-
-
}
-
});
-
return cell;
-
}
-
}
整个实现的核心就在于重点就在于实现Callback<TableColumn<Task, String>, TableCell<Task, String>>然后返回JavaFX API自带的TextFieldTableCell。并在call()方法中,为cell增加了双击事件的处理。