Как я могу обернуть текст в ячейках JFXTreeTableView?
Моя фабрика ячеек столбца JFoenix TableTreeView создается, как показано ниже.
// Set column cell factories and width preference
for (JFXTreeTableColumn<LogEntry, String> column : columnList) {
column.setCellFactory(param ->
new GenericEditableTreeTableCell<>(new TextFieldEditorBuilder()));
column.setPrefWidth(100);
}
После нескольких часов поиска я не могу понять, как заставить ячейки таблицы дерева переносить текст. Я даже пытался установить значение переноса текста для каждого GenericEditableTreeTableCell
в true, но я думаю, что я также должен вызывать метод setWrappingWidth()
для чего-то. Я попробовал следующий блок кода, но в итоге получил NullPointerException
.
// Set column cell factories and width preference
for (JFXTreeTableColumn<LogEntry, String> column : columnList) {
column.setCellFactory(param -> {
GenericEditableTreeTableCell<LogEntry, String> cell =
new GenericEditableTreeTableCell<>(new TextFieldEditorBuilder());
Text text = (Text) cell.getGraphic();
text.setWrappingWidth(1); //null pointer exception
cell.setWrapText(true);
return cell;
});
column.setPrefWidth(100);
}
Итак, у меня остался следующий блок кода, который отлично работает и отображает таблицу, но ячейки не переносят текст.
// Set column cell factories and width preference
for (JFXTreeTableColumn<LogEntry, String> column : columnList) {
column.setCellFactory(param -> {
GenericEditableTreeTableCell<LogEntry, String> cell =
new GenericEditableTreeTableCell<>(new TextFieldEditorBuilder());
// I think I should call setWrappingWidth() on some object here
// but I don't know what object
cell.setWrapText(true);
return cell;
});
column.setPrefWidth(100);
}
Документацию по настройке JFXTreeTableView можно найти здесь. Кажется, ничего не говорится об переносе текста ячейки.
Изменить: я пытался сделать это с помощью CSS, но не получил никаких результатов. Фактически, cell.isWrapText()
вернуло значение false после использования этого кода CSS, что означает, что событие не установило значение true. Я знаю, что блок CSS работает правильно, потому что с его помощью я могу изменить цвет заливки текста каждого элемента.
* {
-fx-wrap-text: true;
}
Редактировать 2: некоторые люди говорили в других полусвязанных сообщениях, что панель прокрутки может заставить узел думать, что она имеет гораздо большую ширину, чем то, что показано пользователю. Поскольку JavaFX TreeTableView использует полосу прокрутки, когда таблица слишком велика, я решил попробовать их решения. Я попытался установить предпочтительную ширину ячейки - все равно безрезультатно.
cell.setWrapText(true);
cell.setPrefWidth(100);
//cell.setMaxWidth(100); doing this too made no difference
//cell.setMinWidth(100); doing this too made no difference
Изменить 3: кажется, я знаю, в чем проблема! Кажется, что высота строки не позволяет ячейке переносить текст. Если я установлю минимальную высоту строк на достаточно большое значение, ячейка перенесет свой текст! Теперь мне просто нужно знать, как настроить высоту строки динамически, чтобы разместить ячейку, когда она хочет обернуть текст.
Правка 4: кажется, что строка не допускает разрывов строк, что может быть причиной того, что ячейка не может переносить текст. Он не может обернуть текст, потому что новые строки, которые он создает, пережевываются.