Как заставить TableView всегда добавлять определенный столбец для сортировки в JavaFX?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как заставить TableView всегда добавлять определенный столбец для сортировки в JavaFX?

Сообщение Anonymous »

Мне нужно, чтобы таблица всегда сортировалась по определенному столбцу (когда включены некоторые настройки). Например, когда пользователь сортирует таблицу по нужному ему столбцу, программа автоматически добавит еще один столбец для сортировки.
Это мой код — программа всегда должна сортировать по идентификатору ASC:

Код: Выделить всё

public class JavaFxTest7 extends Application {

private static record Student(int id, String name, int mark) {};

public static void main(String[] args) {
launch(args);
}

@Override
public void start(Stage stage) {
var table = this.createTable();
table.getSortOrder().addListener((ListChangeListener>)(change) -> {
//if some settings enabled then
var idColumn = table.getColumns().get(0);
if (!table.getSortOrder().contains(idColumn)) {
idColumn.setSortType(TableColumn.SortType.ASCENDING);
table.getSortOrder().add(0, idColumn);
}
});
var scene = new Scene(table, 300, 200);
stage.setScene(scene);
stage.show();
}

private TableView createTable() {
var table = new TableView();
table.getItems().addAll(new Student(1, "Billy", 3),
new Student(2, "Johnny", 4), new Student(3, "Mickey", 5));
var idColumn = new TableColumn("ID");
idColumn.setCellValueFactory((data) ->  new ReadOnlyObjectWrapper(data.getValue().id()));
var nameColumn = new TableColumn("Name");
nameColumn.setCellValueFactory((data) ->  new ReadOnlyStringWrapper(data.getValue().name()));
var markColumn = new TableColumn("Mark");
markColumn.setCellValueFactory((data) ->  new ReadOnlyObjectWrapper(data.getValue().mark()));
table.getColumns().addAll(idColumn, nameColumn, markColumn);
table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY_FLEX_LAST_COLUMN);
return table;
}
}
И вот результат:
[img]https://i.stack.imgur .com/gbgRS.gif[/img]

Сортировка по идентификатору всегда добавляется, как и планировалось. Проблема в том, что с моим решением невозможно убрать сортировку по другим столбцам - неважно, сколько раз вы нажимаете на столбец name, столбец name всегда существует в sortOrder список.
Может ли кто-нибудь сказать, как это исправить?

Подробнее здесь: https://stackoverflow.com/questions/783 ... -in-javafx
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»