2016-01-19 2 views
3

Я хочу, чтобы определенный столбец TableView был отсортирован по умолчанию. Как мне это сделать? Я попытался сделать column.setSortType(SortType.ASCENDING);, а также положить его в звонок runLater. Я посмотрел на JavaDocs и прочее, и все, что я вижу, может представлять интерес, это свойственный setSortPolicy метод.Как сортировать TableView программно?

ответ

2

Чтобы выполнить «одноразовое» своего рода, вызов

tableView.getSortOrder().setAll(...); 

переходящим в TableColumn (ы) с помощью которого вы хотите данные, отсортированные.

Чтобы сортировка сохранялась, даже если элементы в списке изменяются, создайте SortedList и передайте ее методу setItems(...) таблицы. (Для того, чтобы изменить детали, вы все равно будет манипулировать основной список.)

В качестве примера, используя обычный contact table example вы могли бы сделать:

TableView<Person> table = new TableView<>(); 
TableColumn<Person, String> firstNameCol = new TableColumn<>("First Name"); 
firstNameCol.setCellValueFactory(cellData -> cellData.getValue().firstNameProperty()); 
TableColumn<Person, String> lastNameCol = new TableColumn<>(" 
Last Name"); 
firstNameCol.setCellValueFactory(cellData -> cellData.getValue().lastNameProperty()); 

ObservableList<Person> data = FXCollections.observableArrayList(); 

SortedList<Person> sortedData = new SortedList<>(data); 

// this ensures the sortedData is sorted according to the sort columns in the table: 
sortedData.comparatorProperty().bind(table.comparatorProperty()); 

table.setItems(sortedData); 

// programmatically set a sort column: 
table.getSortOrder().addAll(firstNameCol); 

// note that you should always manipulate the underlying list, not the sortedList: 
data.addAll(new Person(...), new Person(...)); 
+0

Это работает ... вроде. Я могу сортировать таблицу изначально, но когда я меняю элементы в ней, сортировка очищается. Я также не могу изменить порядок сортировки вручную из front-end. –

+0

Чтобы включить сортировку для сохранения изменений в элементах, установите элементы в ['SortedList'] (http://docs.oracle.com/javase/8/javafx/api/javafx/collections/transformation/SortedList.html) (и манипулировать базовым списком). Добавил это к ответу; если вам нужна дополнительная информация, вам, вероятно, потребуется указать код в вашем вопросе. –

Смежные вопросы