TreeTableView
装填数据
Data data1 = new Data("张三", 20, true); Data data2 = new Data("李四", 30, false); Data data3 = new Data("王五", 40, true); Data data4 = new Data("赵六", 50, false); Data data5 = new Data("钱七", 60, true); Data data6 = new Data("孙八", 70, false); Data data7 = new Data("周九", 80, true); TreeItem<Data> root = new TreeItem<>(data1); TreeItem<Data> item2 = new TreeItem<>(data2); TreeItem<Data> item3 = new TreeItem<>(data3); TreeItem<Data> item4 = new TreeItem<>(data4); TreeItem<Data> item5 = new TreeItem<>(data5); TreeItem<Data> item6 = new TreeItem<>(data6); TreeItem<Data> item7 = new TreeItem<>(data7); root.getChildren().addAll(item2, item3, item4); item2.getChildren().addAll(item5, item6); item3.getChildren().addAll(item7); root.setExpanded(true); item2.setExpanded(true); item3.setExpanded(true);
设置TreeTableView
TreeTableView<Data> view = new TreeTableView<>(); view.setLayoutX(100); view.setLayoutY(100); view.setRoot(root); view.setPrefWidth(300); // 平分列宽 view.setColumnResizePolicy(TreeTableView.CONSTRAINED_RESIZE_POLICY); // 设置多选 view.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); // 设置单元格可选中 view.getSelectionModel().setCellSelectionEnabled(true);
设置列
TreeTableColumn<Data, String> nameCol = new TreeTableColumn<>("姓名"); TreeTableColumn<Data, Number> ageCol = new TreeTableColumn<>("年龄"); TreeTableColumn<Data, Boolean> maleCol = new TreeTableColumn<>("布尔"); nameCol.setCellValueFactory(new TreeItemPropertyValueFactory<>("name")); ageCol.setCellValueFactory(new TreeItemPropertyValueFactory<>("age")); maleCol.setCellValueFactory(new TreeItemPropertyValueFactory<>("male")); // 加载列 view.getColumns().addAll(nameCol, ageCol, maleCol);
事件监听
// 行单选事件 view.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { System.out.println("选中的行:" + newValue.getValue().getName()); }); // 行多选事件 view.getSelectionModel().getSelectedItems().addListener((InvalidationListener) observable -> { ObservableList<TreeItem<Data>> list = (ObservableList<TreeItem<Data>>) observable; System.out.printf("-----------选中的行数:%d----------------", list.size()); list.forEach(System.out::println); }); // 单元格多选事件 view.getSelectionModel().getSelectedCells().addListener((InvalidationListener) observable -> { ObservableList<TreeTablePosition<Data, ?>> list = (ObservableList<TreeTablePosition<Data, ?>>) observable; System.out.printf("-----------选中的单元格数:%d----------------\n", list.size()); list.forEach(item -> { // 获取每一个单元格 Object data = item.getTableColumn().getCellData(item.getRow()); System.out.printf("(%d,%d):%s\n", item.getRow(), item.getColumn(), data.toString()); }); });