Wie kann ich den Text in JFXTreeTableView-Zellen umbrechen?Text in JFXTreeTableView-Zellen umbrechen
Meine JFenix TableTreeView-Säulenzelle wird wie unten gezeigt erstellt.
Nach Stunden der Suche kann ich nicht herausfinden, wie man die Zellen in der Baumtabelle bekommt, um Text zu wickeln. Ich habe sogar versucht, den Wrap-Text-Wert für jede GenericEditableTreeTableCell
auf True zu setzen, aber ich denke, ich sollte auch die setWrappingWidth()
Methode auf etwas aufrufen. Ich habe den folgenden Codeblock ausprobiert, aber am Ende habe ich eine NullPointerException
bekommen.
// 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);
}
Also, ich bin mit dem folgenden Code-Block links, die völlig in Ordnung läuft und zeigt die Tabelle, aber die Zellen umhüllen keinen Text.
// 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);
}
Die Dokumentation für eine JFXTreeTableView Einrichtung kann here finden. Es scheint nichts über das Umhüllen von Zelltext zu sagen.
Bearbeiten: Ich habe versucht, es mit CSS zu tun, aber habe keine Ergebnisse erhalten. Tatsächlich hat die cell.isWrapText()
nach Verwendung dieses CSS-Codes den Wert false zurückgegeben - was bedeutet, dass das Ereignis nicht den Wert true festgelegt hat. Ich weiß, dass der CSS-Block korrekt funktioniert, weil ich damit die Füllfarbe jedes Elements ändern kann.
* {
-fx-wrap-text: true;
}
Edit 2: Einige Leute sagten, auf anderen Halbbezogene Beiträge, die ein Bildlauffenster ein Knoten kann dazu führen, zu glauben, es eine viel größere Breite hat als das, was dem Benutzer angezeigt wird. Da eine JavaFX TreeTableView eine Bildlaufleiste verwendet, wenn die Tabelle zu groß ist, dachte ich mir, ich würde ihre Lösungen versuchen. Ich habe versucht, die bevorzugte Breite der Zelle einzustellen - immer noch keine Ergebnisse.
cell.setWrapText(true);
cell.setPrefWidth(100);
//cell.setMaxWidth(100); doing this too made no difference
//cell.setMinWidth(100); doing this too made no difference
Bearbeiten 3: Ich glaube, ich kenne das Problem! Es scheint, dass die Zeilenhöhe es ablehnt, die Zelle Text umzuleiten. Wenn ich die minimale Höhe der Zeilen auf einen ausreichend großen Wert setze, umschließt die Zelle ihren Text! Jetzt muss ich nur wissen, wie man die Zeilenhöhe dynamisch anpasst, um die Zelle anzupassen, wenn sie Text umbrechen will.
Bearbeiten 4: Es scheint, dass die Zeile keine Zeilenumbrüche erlaubt, die die Ursache dafür sein können, dass die Zelle den Text nicht umbrechen kann. Der Text kann nicht umgebrochen werden, da die neuen Zeilen chomped sind.
Ich ging stattdessen mit einer Java-Tree-Tabelle, aber ich plane, die JFXTreeTable in naher Zukunft eine weitere Aufnahme zu geben. Ich werde deinen Code dann versuchen, aber für den Moment sieht das wie eine solide Antwort aus, also werde ich es in der Zwischenzeit upvote! – Region39
Großartig, danke! :) – smashbotica
Also habe ich es endlich geschafft, deine Lösung heute zu implementieren, aber ich stecke auf einem Teil des Prozesses fest. Wenn Sie die Methode 'createNode' in' TreeAreaEditorBuilder' überschreiben, geben Sie 'ControlUtil.styleNodeWithPadding (Bereich)' zurück. Woher kommt 'ControlUtil'? Ich erhalte einen Fehler in IntelliJ und es werden keine Klassen zum Importieren vorgeschlagen. Ich konnte auch keine Dokumentation mit einer Google-Suche finden. – Region39