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) { //tableCell没有数据或者为空
- setText(null);
- setGraphic(null);
- else {
- setText(null);
- setGraphic(node); //设置Node
- }
- }
- @Override
- public void startEdit() {
- super.startEdit();
- // 设置编辑状态
- //super.setGraphic(null);
- //super.setText(null);
- }
- @Override
- public void cancelEdit() {
- super.cancelEdit();
- //退出编辑状态
- //super.setText(null);
- // super.setGraphic(null);
- }
- }
双击鼠标监听
通过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;
- }
- }