TableView选择模式与监听

  • 设置选择性显示或隐藏某列tableView.setTableMenuButtonVisible(true);

  • 设置每列宽度相同

    double width = tableView.getPrefWidth() / tableView.getColumns().size();  
    for (TableColumn<StudentProperty, ?> col : tableView.getColumns()) {  
        col.setPrefWidth(width);  
    }
    
  • 隐藏某列isBoyCol.setVisible(false);

  • 设置滚动到某行tableView.scrollTo(student11);

  • 设置滚动到某列tableView.scrollToColumnIndex(2);

  • 设置单元格尺寸tableView.setFixedCellSize(60);

  • 设置可编辑tableView.setEditable(true);

  • 设置每一列的显示效果

    nameCol.setCellFactory(TextFieldTableCell.forTableColumn());  
    ageCol.setCellFactory(TextFieldTableCell.forTableColumn(new StringConverter<Number>() {  
        @Override  
        public String toString(Number object) {  
            if (object == null) {  
                return null;  
            }  
            return object.toString();  
        }  
        @Override  
        public Number fromString(String string) {  
            // 正则匹配整数  
            if (!string.matches("\\d+")) {  
                return null;  
            }  
            return Integer.parseInt(string);  
        }  
    }));  
    scoreCol.setCellFactory(TextFieldTableCell.forTableColumn(new StringConverter<Number>() {  
        @Override  
        public String toString(Number object) {  
            if (object == null) {  
                return null;  
            }  
            return object.toString();  
        }  
        @Override  
        public Number fromString(String string) {  
            // 正则匹配小数  
            if (!string.matches("\\d+.?\\d*")) {  
                return null;  
            }  
            return Double.parseDouble(string);  
        }  
    }));  
    // 如果值为true,则显示为男,否则为女  
    isBoyCol.setCellFactory(TextFieldTableCell.forTableColumn(new StringConverter<Boolean>() {  
        @Override  
        public String toString(Boolean object) {  
            if (object == null) {  
                return null;  
            }  
            return object ? "男" : "女";  
        }  
        @Override  
        public Boolean fromString(String string) {  
            return string.equals("男");  
        }  
    }));
    
  • 设置多选tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

  • 选中项发生改变监听(行)

    tableView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> System.out.println(newValue.getName()));
    
  • 设置每一个表格的单元格可以被单独选中tableView.getSelectionModel().setCellSelectionEnabled(true);

  • 选中项发生改变监听(单元格)

    tableView.getSelectionModel().getSelectedCells().addListener((InvalidationListener) observable -> {  
        ObservableList<TablePosition<StudentProperty, ?>> obs = (ObservableList<TablePosition<StudentProperty, ?>>) observable;  
        obs.forEach(item -> {  
            System.out.print("行 = " + item.getRow() + ", 列 = " + item.getColumn());  
            // 获取该单元格数据  
            System.out.println(", 数据 = " + item.getTableColumn().getCellData(item.getRow()));  
        });  
        System.out.println("------------------------------");  
    });
    
  • 获取所有选中项tableView.getSelectionModel().getSelectedItems();

  • 选中某一格tableView.getSelectionModel().select(2, nameCol);

  • 选中选中单元格左边的一格,如果是单选则会切换选中,多选则会追加选中(1格)tableView.getSelectionModel().selectLeftCell();

  • 选中选中行的上面一行,如果是单选则会切换选中,多选则会追加选中(1行)tableView.getSelectionModel().selectPrevious();

  • 聚焦某行tableView.getFocusModel().focus(2);

  • 聚焦某单元格tableView.getFocusModel().focus(2, nameCol);