JavaFX, столбцы в TableView изменяют размер после перемещения
У меня есть TableView с количеством столбцов, которое превышает ширину экрана. Когда он загружается в первый раз, все столбцы имеют одинаковую ширину, но, как только я переместил один из них, все они будут изменены до ширины, равной максимальной ширине данных внутри ячеек столбца.
Мой вопрос: возможно ли отключить это поведение или заставить его работать до первой загрузки TableView?
PS: TableView загружается пустым, после нажатия кнопки он заполняется данными, потому что у вас есть какое-то ключевое поле для ввода перед отправкой запроса данных.
2 ответа
После некоторых тестов я обнаружил, что причиной описанного поведения было: не настройка простоты столбца prefWidth.
Если вы создадите табличное представление с данными внутри с начала и без установки prefWidth столбца, ширина всех столбцов будет соответствовать максимальной ширине данных, и, если вы измените ширину столбца, при ее перетаскивании ширина будет восстановлена до исходного значения.
Если вы создадите табличное представление с данными внутри, начиная с начала и настройки prefWidth столбца, ширина всех столбцов будет соответствовать установленному значению, и если вы увеличите столбец до его перетаскивания, то ширина этого столбца останется неизменной.
Я понятия не имею, если это ошибка или это нужно. Однако, спасибо вам за предложения.
Когда он загружается в первый раз, все столбцы имеют одинаковую ширину, но, как только я переместил один из них, все они будут изменены до ширины, равной максимальной ширине данных внутри ячеек столбца.
Такое поведение довольно странно. Я не уверен, что это так, как задумано, или это ошибка. Если вы считаете, что это ошибка, отправьте ее в баг-трекер JavaFX.
По ходу я предполагаю, что вы имеете в виду, что вы нажимаете на заголовок таблицы и перетаскиваете столбец в другую позицию, чтобы изменить порядок столбцов.
Кажется, есть (по крайней мере) два способа исправить это так, чтобы заданная пользователем ширина столбца сохранялась после перемещения столбца.
A. Использование CONSTRAINED_RESIZE_POLICY (в основном) исправляет это.
table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
ИЛИ ЖЕ
Б. Привязать prefWidth каждого столбца к его фактической ширине.
firstNameCol.prefWidthProperty().bind(firstNameCol.widthProperty());