如何将文本包装在 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);
}
经过数小时的搜索,我无法弄清楚如何让树表中的单元格来换行。我什至尝试将every 的换行文本值设置为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()
使用此 CSS 代码后返回的 false - 意味着它没有将值设置为 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:该行似乎不允许换行,这可能是单元格无法换行的原因。它无法换行文本,因为它创建的新行被切掉了。