如何將文本包裝到JFXTreeTableView單元格中?將文本包裝到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的文檔可以找到here。它似乎沒有提到任何有關包裝單元格文本的內容。
編輯:我試着用CSS做,但沒有得到任何結果。事實上,在使用這個CSS代碼後,cell.isWrapText()
返回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:看來該行不允許換行符,這可能導致單元格無法換行文本。它不能包裝文本,因爲它創建的新行被刪除。
我用一個Java樹表來代替,但我打算在不久的將來再給JFXTreeTable一個鏡頭。然後,我會嘗試你的代碼,但現在,這看起來像一個堅實的答案,所以我會在同一時間upvote它! – Region39
太好了,謝謝! :) – smashbotica
因此,我終於在今天實現了您的解決方案,但是我陷入了這個過程的一部分。當你重寫'TreeAreaEditorBuilder'中的'createNode'方法時,你返回'ControlUtil.styleNodeWithPadding(pane)'。 ControlUtil從哪裏來?我在IntelliJ中遇到了一個錯誤,並且沒有提示要導入的任何類。我也找不到任何帶有Google搜索的文檔。 – Region39