TableView列宽与排序

列宽

  • 设置每列宽度相同(列拉长时挤占空间)tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

  • 限制用户无法改变列宽度tableView.setColumnResizePolicy(param -> true);

排序

  • 是否允许排序(不允许)nameCol.setSortable(false);

  • 排序优先级tableView.getSortOrder().addAll(nameCol, ageCol, scoreCol, isBoyCol);

  • 自定义排序

    tableView.setSortPolicy(new Callback<TableView<StudentProperty>, Boolean>() {  
        @Override  
        public Boolean call(TableView<StudentProperty> param) {  
            param.getColumns().forEach(col -> {  
                // 姓名,升序  
                if (col.getText().equals("姓名") && col.getSortType() == TableColumn.SortType.ASCENDING) {  
                    // 设置图标  
                    col.setSortNode(new Label("↑"));  
                    System.out.println("姓名升序");  
                    param.getItems().sort(Comparator.comparing(StudentProperty::getName));  
                }  
                // 姓名,降序  
                if (col.getText().equals("姓名") && col.getSortType() == TableColumn.SortType.DESCENDING) {  
                    col.setSortNode(new Label("↓"));  
                    System.out.println("姓名降序");  
                    param.getItems().sort(((o1, o2) -> o2.getName().compareTo(o1.getName())));  
                }  
            });  
            // 如果返回false则会禁用排序  
            return true;  
        }  
    });
    
  • 单独定义某列,升序

    nameCol.setComparator(((s1, s2) -> {  
        System.out.println("单独定义名称列,名称升序");  
        return s1.compareTo(s2);  
    }));
    
  • 点击按钮进行排序

    button.setOnAction(event -> {  
        // 名称降序  
        nameCol.setSortType(TableColumn.SortType.DESCENDING);  
        // 使用数据源排序  
        tableView.getItems().sort((o1, o2) -> {  
            System.out.println("使用数据源排序");  
            return o1.getName().compareTo(o2.getName());  
        });  
    });