javafx之TableView的TaleCell
来源:互联网 发布:怎么提升淘宝收藏度 编辑:程序博客网 时间:2024/06/08 08:32
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增加了双击事件的处理。