JavaFX TableView mit Zeilenumbruch in Zellen

eldrior

Aktives Mitglied
Hallo,

ich habe in meiner Anwendung mit JavaFX (FXML) eine Tabelle. Diese Tabelle wird mit Text gefüllt, der teilweise länger ist, als die Zelle breit, daher möchte ich gerne einen automatischen Zeilenumbruch haben.
Ich habe gelesen, dass ich dafür meine eigene CellFactory brauche und habe mithilfe von Google folgende Klasse geschrieben:

Java:
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.text.Text;
import javafx.util.converter.DefaultStringConverter;

public class WrappingTextFieldTableCell<S> extends TextFieldTableCell<S, String>
{

    private final Text cellText;

    public WrappingTextFieldTableCell() {
        super(new DefaultStringConverter());
        this.cellText = createText();
    }

    @Override
    public void cancelEdit() {
        super.cancelEdit();
        setGraphic(cellText);
    }

    @Override
    public void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);
        if (!isEmpty() && !isEditing()) {
            setGraphic(cellText);
        }
    }

    private Text createText() {
        Text text = new Text();
        text.wrappingWidthProperty().bind(widthProperty());
        text.textProperty().bind(itemProperty());
        return text;
    }
}

Ich habe in meinem Controller eine Methode, in der ich folgendes versuche:

Java:
    private void setUpTable ()
    {
        tc1.setCellFactory(param -> new WrappingTextFieldTableCell<EmpWeekOvw>());

        tc1.setCellValueFactory(new PropertyValueFactory<>("week1"));
    }

tc1:
Java:
@FXML
    private TableColumn<EmpWeekOvw, String> tc1;

Ich bekomme in der WrappingTextFieldTableCell Klasse jetzt aber folgenden Error, wenn ich versuche die Anwendung zu starten:

Code:
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$156(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassCastException: de.mycompany.wochenplan.domain.WeekText cannot be cast to java.lang.String
    at de.mycompany.wochenplan.gui.controller.weekOvwPopup.WrappingTextFieldTableCell.updateItem(WrappingTextFieldTableCell.java:7)
    at javafx.scene.control.TableCell.updateItem(TableCell.java:663)
    at javafx.scene.control.TableCell.indexChanged(TableCell.java:468)
    at javafx.scene.control.IndexedCell.updateIndex(IndexedCell.java:116)
    at com.sun.javafx.scene.control.skin.TableRowSkinBase.updateCells(TableRowSkinBase.java:533)
    at com.sun.javafx.scene.control.skin.TableRowSkinBase.init(TableRowSkinBase.java:147)
    at com.sun.javafx.scene.control.skin.TableRowSkin.<init>(TableRowSkin.java:64)
    at javafx.scene.control.TableRow.createDefaultSkin(TableRow.java:212)
    at javafx.scene.control.Control.impl_processCSS(Control.java:859)
    at javafx.scene.Node.processCSS(Node.java:9056)
    at javafx.scene.Node.applyCss(Node.java:9153)
    at com.sun.javafx.scene.control.skin.VirtualFlow.setCellIndex(VirtualFlow.java:1964)
    at com.sun.javafx.scene.control.skin.VirtualFlow.getCell(VirtualFlow.java:1797)
    at com.sun.javafx.scene.control.skin.VirtualFlow.getCellLength(VirtualFlow.java:1879)
    at com.sun.javafx.scene.control.skin.VirtualFlow.computeViewportOffset(VirtualFlow.java:2528)
    at com.sun.javafx.scene.control.skin.VirtualFlow.layoutChildren(VirtualFlow.java:1189)
    at javafx.scene.Parent.layout(Parent.java:1079)
    at javafx.scene.Parent.layout(Parent.java:1085)
    at javafx.scene.Parent.layout(Parent.java:1085)
    at javafx.scene.Parent.layout(Parent.java:1085)
    at javafx.scene.Parent.layout(Parent.java:1085)
    at javafx.scene.Group.prefWidth(Group.java:182)
    at javafx.scene.Scene.getPreferredWidth(Scene.java:1697)
    at javafx.scene.Scene.resizeRootToPreferredSize(Scene.java:1673)
    at javafx.scene.Scene.preferredSize(Scene.java:1645)
    at javafx.scene.Scene.impl_preferredSize(Scene.java:1720)
    at javafx.stage.Window$9.invalidated(Window.java:846)
    at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:109)
    at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:144)
    at javafx.stage.Window.setShowing(Window.java:922)
    at javafx.stage.Window.show(Window.java:937)
    at javafx.stage.Stage.show(Stage.java:259)
    at de.mycompany.wochenplan.gui.ScreenFramework.<init>(ScreenFramework.java:36)
    at de.mycompany.wochenplan.Main.start(Main.java:42)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$163(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$176(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$174(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
Exception running application de.mycompany.wochenplan.Main
TL;DR: WeekText cannot be cast to java.lang.String

Ich vermute mal, dass ich da irgendwas noch nicht ganz richtig verstanden habe, daher wäre es nett, wenn mir hier jemand auf die Sprünge helfen könnte. Falls ihr einfachere Möglichkeiten kennt, wie man dafür sorgt, dass Text in Zellen automatisch umbricht (ohne Scrollbar --> Höhe der Zeile einfach anpassen), wäre ich dafür natürlich auch dankbar.


Vielen Dank im Voraus
eldrior
 

eldrior

Aktives Mitglied
Genau, "week1" ist einfach ein WeekText und in EmpWeekOvw sind aktuell ein paar WeekText's gespeichert, die pro Zeile auf die einzelnen Spalten verteilt werden sollen. Eine ToString ist implementiert und alle Getter/Setter sind vorhanden.
Die Klasse WeekText ist eine Entity, ich habe zusätzlich die toString implementiert.

Wir können um das zu vereinfachen aber auch jede andere Klasse nehmen, in der ein String gespeichert ist...
 

mrBrown

Super-Moderator
Mitarbeiter
Deine Cells hast du als eine Cells mit Strings als Inhalt deklariert - nutzen tust du sie aber für WeekText, das gibt ja auch die CellValueFactory zurück ;)

Deine Cell kannst du as TableCell<S,WeekItem> deklarieren, das dürfte in dem Fall passender sein
 

eldrior

Aktives Mitglied
Ist wahrscheinlich nicht die sauberste Lösung, aber ich habe in meiner EmpWeekOvw jetzt die Getter so implementiert, dass Strings zurück kommen. Dann kann ich den restlichen Code (fast) komplett so nutzen und es funktioniert.
Wenn ich die TableCell so implementiert hätte, wie du es vorgeschlagen hast, hätte meine WrappingTextFieldTableCell nicht mehr funktioniert (bspw. new DefaultStringConverter()).

Der Workaround funktioniert jetzt erstmal. Ich werde mich demnächst mal näher damit beschäftigen, wie genau die WrappingTextFieldTableCell funktioniert, sodass ich das sauber implementieren kann (oder hat da jemand einen Tipp? :)).

Vielen Dank für deine Hilfe!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JavaFX TableView nur erste Zeile editable machen und gelb markieren AWT, Swing, JavaFX & SWT 0
Encera TableView Zeilen als Spalten im SceneBuilder AWT, Swing, JavaFX & SWT 0
T TableView Button onAction AWT, Swing, JavaFX & SWT 3
mrbody234 ArrayList<Message> in eine TableView visualisieren AWT, Swing, JavaFX & SWT 2
izoards JavaFX TableView mit Array Inhalt füllen AWT, Swing, JavaFX & SWT 1
A Mit JavaFX einzelne Zeilen in TableView farbig markieren AWT, Swing, JavaFX & SWT 5
I JavaFX Zellen in Tableview editieren AWT, Swing, JavaFX & SWT 0
A TableView updatet sich nicht AWT, Swing, JavaFX & SWT 3
missy72 JavaFX TableView Spalte zwischen den Zeilen AWT, Swing, JavaFX & SWT 5
W TableView füllen AWT, Swing, JavaFX & SWT 18
missy72 JavaFX TableView / IconView mit MousEvent AWT, Swing, JavaFX & SWT 7
missy72 JavaFX Performance / ImageView in TableView über TimeLine AWT, Swing, JavaFX & SWT 1
T TableView aktualisieren AWT, Swing, JavaFX & SWT 1
N JavaFX Tableview nach Löschen von Element falscher Index AWT, Swing, JavaFX & SWT 4
T TableView Zeilen einfärben AWT, Swing, JavaFX & SWT 13
T TableView über Methode befüllen AWT, Swing, JavaFX & SWT 10
missy72 JavaFX TableView / TableColumn / ObservableList / zwei Werte in einer Zelle AWT, Swing, JavaFX & SWT 2
W JavaFX TableView aktualisieren AWT, Swing, JavaFX & SWT 1
S JavaFX - mit Listener Veränderungen in einer TableView abhören AWT, Swing, JavaFX & SWT 3
B JavaFX TableView-Zellen sollen automatisch so groß wie der größte Inhalt sein AWT, Swing, JavaFX & SWT 6
D JavaFX Nullpointerexception wegen TableView AWT, Swing, JavaFX & SWT 2
S Alternative JavaFX TableView AWT, Swing, JavaFX & SWT 1
L JavaFX Tableview row callback AWT, Swing, JavaFX & SWT 0
G Bekomme ResultSet mittels ObservableList nicht ins TableView AWT, Swing, JavaFX & SWT 25
S JavaFX JavaFX TableView scrollen färbt falsche Zeilen AWT, Swing, JavaFX & SWT 1
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
J JavaFx TableView mit CheckBox AWT, Swing, JavaFX & SWT 4
P JavaFX TableView Zelle markieren AWT, Swing, JavaFX & SWT 3
L JavaFX Tableview Datamodel AWT, Swing, JavaFX & SWT 2
M TableView Zeile hinzufügen AWT, Swing, JavaFX & SWT 5
Bluedaishi TableView mit Combox wert wird nicht in die TableView gesetzt AWT, Swing, JavaFX & SWT 38
J TableView Update/Refresh CPU AWT, Swing, JavaFX & SWT 2
B Text im Tetfeld in einer TableView darstellen AWT, Swing, JavaFX & SWT 20
J Tableview - kann man mit Enter die Zellen wechseln AWT, Swing, JavaFX & SWT 1
ralfb1105 JavaFX Dynamisch TableView Spalten erstellen AWT, Swing, JavaFX & SWT 4
M TableView + Datenbank Aktualisierung AWT, Swing, JavaFX & SWT 4
B TableView als PDF speichern AWT, Swing, JavaFX & SWT 8
B JavaFX TableView eine Zeile markieren AWT, Swing, JavaFX & SWT 5
B JavaFX JavaFX TableView PropertyValueFactory für Werte aus HashMap AWT, Swing, JavaFX & SWT 2
L JavaFX TableView Column Sortierung AWT, Swing, JavaFX & SWT 1
L Java FX Keine Anzeige Im Tableview AWT, Swing, JavaFX & SWT 4
L JavaFX TableView kein content text ändern AWT, Swing, JavaFX & SWT 2
L JavaFX TableView mit Aktionenbuttons AWT, Swing, JavaFX & SWT 1
C JavaFX Edit TableView in Verbindung mit SceneBuilder AWT, Swing, JavaFX & SWT 1
C JavaFX ProGuard -> TableView kein Inhalt AWT, Swing, JavaFX & SWT 7
J SceneBuilder TableView Checkbox AWT, Swing, JavaFX & SWT 1
J JavaFX Elemente werden nicht zu TableView hinzugefügt AWT, Swing, JavaFX & SWT 3
F JavaFX (Tree)TableView korrekt drucken AWT, Swing, JavaFX & SWT 1
robinab JavaFX TableView column resize nach setItems() AWT, Swing, JavaFX & SWT 0
G JavaFX TableView Wert in Spalte ändern AWT, Swing, JavaFX & SWT 0
S JavaFx - ausgewählte Rows in Arraylist (Tableview) AWT, Swing, JavaFX & SWT 4
S JavaFX - Populate TableView AWT, Swing, JavaFX & SWT 2
N JavaFX TableView aus Map AWT, Swing, JavaFX & SWT 2
J TableView Daten werden nicht ausgegeben AWT, Swing, JavaFX & SWT 9
B JavaFX TableView aus Collection befüllen AWT, Swing, JavaFX & SWT 1
S JavaFX TableView einzelne Zelle Layout zuweisen AWT, Swing, JavaFX & SWT 3
zhermann TableView die zweite AWT, Swing, JavaFX & SWT 7
H Java FX List<AlbumsBean> in FXML TableView AWT, Swing, JavaFX & SWT 37
zhermann TableView wird nicht gefüllt AWT, Swing, JavaFX & SWT 14
M JavaFX JavaFX ResultSet in TableView ausgeben AWT, Swing, JavaFX & SWT 2
W JavaFX Mehrere Klassen in ein TableView AWT, Swing, JavaFX & SWT 6
MaxG. JavaFX Inhalt in Tableview wird nicht angezeigt AWT, Swing, JavaFX & SWT 11
M JavaFX berechneten Wert in TableView schreiben AWT, Swing, JavaFX & SWT 1
K JavaFX Message in TableView AWT, Swing, JavaFX & SWT 2
H TableView mit variabler Anzahl Spalten AWT, Swing, JavaFX & SWT 2
L JavaFX List oder TableView Größe dynamisch anpassen? AWT, Swing, JavaFX & SWT 4
L JavaFX TableView mit Excelfunktion AWT, Swing, JavaFX & SWT 1
D JavaFX TableView AWT, Swing, JavaFX & SWT 2
L JavaFX TableView mit XYChart verbinden AWT, Swing, JavaFX & SWT 3
blazingblade JavaFX Tableview Clock Column update AWT, Swing, JavaFX & SWT 5
P JavaFX, TableView und Datenbank AWT, Swing, JavaFX & SWT 4
K TableView: 'Komplexes' Object AWT, Swing, JavaFX & SWT 11
L JavaFX TableView background transparent machen AWT, Swing, JavaFX & SWT 7
F TableCell aus TableView holen AWT, Swing, JavaFX & SWT 8
K JavaFX TableView mit Rectangle AWT, Swing, JavaFX & SWT 3
M Befüllung der einzelnen Zeilen des TableView AWT, Swing, JavaFX & SWT 3
J JavaFX Tableview Daten hinzufügen aus anderer Klasse AWT, Swing, JavaFX & SWT 7
J Tableview Daten hinzufügen und aktualisieren AWT, Swing, JavaFX & SWT 5
N JavaFX TableView füllt nicht das gesamte ScrollPanle aus AWT, Swing, JavaFX & SWT 2
M JavaFX TableView & CSS, Rand um Tabellenkopf entfernen AWT, Swing, JavaFX & SWT 3
L JavaFX ListView oder TableView Style überschreiben? AWT, Swing, JavaFX & SWT 6
G Event Handling TableView daten in ein neues Fenster herauslesen? AWT, Swing, JavaFX & SWT 3
thet1983 JavaFX TableView Objekt Daten anzeige AWT, Swing, JavaFX & SWT 2
J JavaFX TableView - Höhe der Zeilen AWT, Swing, JavaFX & SWT 3
L JavaFX TableView mit Attributs der Modellreferenzerierung für die Spalte AWT, Swing, JavaFX & SWT 3
I JavaFX Buttons und TableView AWT, Swing, JavaFX & SWT 2
J JavaFX Bestimmte Zellen im TableView ändern (Farbe und Text) AWT, Swing, JavaFX & SWT 1
B Java FX TableView Zeilen mit verschiedenen Typen AWT, Swing, JavaFX & SWT 15
Z JavaFX TableView cellValueFactory für Arrays AWT, Swing, JavaFX & SWT 2
E JavaFX TableView mit Rechtsklick Zelle auswählen AWT, Swing, JavaFX & SWT 8
C (JavaFX 8) SQLite Datenbank in einem TableView darstellen AWT, Swing, JavaFX & SWT 2
D JavaFX TableView bleibt leer. AWT, Swing, JavaFX & SWT 8
M JavaFX TableView nach Spalte sortieren AWT, Swing, JavaFX & SWT 1
P JavaFX Dynamische TableView AWT, Swing, JavaFX & SWT 14
V Java FX POJO aus Datenbank in FX TableView / Best Practice AWT, Swing, JavaFX & SWT 0
P JavaFX TableView Item hinzufügen AWT, Swing, JavaFX & SWT 20
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
M JavaFX Tutorial zu Tableview AWT, Swing, JavaFX & SWT 5
C JavaFX Zugriff auf TableView AWT, Swing, JavaFX & SWT 2
M JavaFX TableView mit CheckBox als Boolean AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben