TableView: 'Komplexes' Object

Kababär

Top Contributor
Hi,

im Rahmen eines Projektes wäre eine TableView für die Ansicht der Daten eigentlich ganz gut geeignet, nur gibt es da ein Problem: ich weiß nicht wie die TableView zu füllen ist und wie ich die Daten wieder rauslesen kann.

Im Prinzip gibt es im Model nur eine einzige Liste mit dem Typ "Account".
Ein Account hat eines Liste mit dem Typ "Transfer". Fast alle Attribute sind Properties, somit wäre das aktualisieren kein Problem.

Demnach soll es in der TableView nur zwei Spalten geben, eine für Account und eine für Transfer, wobei für jeden Account alle Transfers vertikal aufgelistet werden sollen, also pro Transfer eine eigene Zelle (Cell).
Exemplarisch also:
Code:
Account 1          Transfer 1a
                   Transfer 2a
                   Transfer 3a
Account 2          Transfer 1b
Account 3          Transfer 1a
                   Transfer 1b
                   Transfer 2a

Was ich eben nicht will, ist, dass der Account in jeder Zeile nochmals vorkommt.. (es sei denn, die Liste der Transfers ist so lange und man scrollt so weit runter, bis der Eintrag des Accounts nicht mehr zu sehen ist, dann würde ich ihn gerne "on top" behalten, aber eins nach dem anderen).
Bisher habe ich nur die Grundlagen geschaffen. Was wie folgt aussieht:
Code:
TableColumn<Account, String> accountColumn = new TableColumn<>("Accounts");
        accountColumn.setCellValueFactory(item -> item.getValue().nameProperty());

        TableColumn<Account, Transfer> transfersColumn = new TableColumn<>("Funktionen");
        transfersColumn.setCellFactory(new Callback<TableColumn<Account, Transfer>, TableCell<Account, Transfer>>() {

            @Override
            public TableCell<Account, Transfer> call(TableColumn<Account, Transfer> param) {

                TableCell<Account, Transfer> functionCell = new TableCell<Account, Transfer>() {

                    @Override
                    protected void updateItem(Transfer item, boolean empty) {
                        if (item != null) {
                            double function= item.getTransferFuction();
                            Label functionLabel = new Label(String.valueOf(function));
                            if (function< 0) {
                                function.setStyle("-fx-font-color:red");
                            } else {
                                functionLabel.setStyle("-fx-font-color:green");
                            }
                            setGraphic(functionLabel);
                        }
                    }
                };

                return functionCell;
            }

        });

Für die Transfers sollen nur die Funktionen (wie oben dargestellt) angezeigt werden.
Wie ist das lösbar?

Klicke ich auf eine Zelle (es wird immer die gesamte Reihe markiert. Kann man auch einzelne Zellen markieren?), so soll es möglich sein, Account und Transfer über vorgesehene Buttons zu verändern. Problem hierbei ist: wie kriege ich die Referenz auf das Transfer-Object?

Das ist sicherlich nicht einfach. Leider habe ich im Internet nichts gefunden, das mir helfen könnte, daher hoffe ich, dass mir jemand von euch helfen kann :)
 

AndiE

Top Contributor
Ich hoffe die Idee wird nicht gleich verrissen: Soweit ich das sehe, hast du eine m:n-Beziehung. Theoretisch ergeben sich daraus maximal m x n- Tabellenzeilen, also bei 100 accounts und 25 transfers sind das 2500 Zeilen. Du müsstest nach meiner Meinung also erst mal ein Arry füllen, in dem du die Daten aus deiner Liste ausliest. Nun ist ja auch jedes Tupel (m,n) eindeutig durch eine Zahl i, das sei der Index, bestimmbar( im obigen Beispiel ist i=1 bis 1500). Dabei entsteht i, indem du mitzählst, wenn du die Tupel generierst.
 

Thallius

Top Contributor
Also ich verstehe deinen Ansatz nicht...

warum schreibst du nicht erstmal einfach einen eigenes Modell welches in der ersten Spalte nicht nur den String als value zurück gibt sondern auch noch die Anzahl der Wiederholungen. Also wenn man dein Beispiel oben ansieht dann würde für die erste Spalte einfach z.B. "Account 1 : 1", "Account 1 : 2" zurück gegeben. Dann schreibst du dir einen eigenen TableCellRenderer und kann den sting beim : splitten und wenn die Zahl hinter dem : größer 1 ist dann zeichnest du einfach gar nichts.
Damit kannst du dann spätervauch problemlos ausrechnen ob du in Zeile eins was anzeigen musst weil der erste Eintrag oben raus gescrollt ist. Aber das ist der nächste Schritt.
 

Kababär

Top Contributor
@AndiE die Beziehung ist 1:m, da je ein Account eine Liste von Transfer-Objekten besitzt. Theoretisch würde die Idee von dir funktionieren, entweder mit dem Tupel oder einer Map.

@Thallius Genau dann wenn Zahl hinter dem ":" größer eins ist, wird es problematisch. Denn dann sollen die Einträge aus Transfers vertikal, jeder Eintrag in eine eigene Zelle aber in der selben Spalte, eingetragen werden.
Ich hab noch gar nicht ausprobiert, ob ich die einzelnen Objekte aus Transfers einfach der Spalte hinzufügen kann... Aber denke da kommt eine Exception weil es keine Beziehung Account gibt. Probiere ich mal gleich aus xD
Den TableCellRenderer schaue ich mir mal an (oder meinst du damit die CellValueFactory?)

Danke dzim, hatte ich gestern auch noch gefunden. Praktisch dass das so einfach geht:)
 

Thallius

Top Contributor
Ich verstehe ehrlich gesagt nicht was du willst.

Wenn du mit in "eine eigene Zelle aber selbe Spalte" meinst das du mehrere Zellen in der gleichen Zeile und Spalte haben willst, dann ist das natürlich quatsch. Sowas geht nicht und macht man auch nicht. Du kannst aber z.B: einen MultiLineTableCellRenderer schreiben, der dir die Transfers in eine Zelle in mehrere Zeilen aufteilt. Aber wie gesagt. Ich kann im Moment nicht mehr folgen was Du eigentlich willst. Vielleicht machst du uns mal ein Bild wo man die Zeilen und Spalten anhand eines Trennstrichs sehen kann und setzt da deine Werte rein die du sie haben willst...
 

Kababär

Top Contributor
Eigentlich ist es einfach: eigene Zelle, selbe Spalte, andere Reihe/Zeile.
Muss gleich mal gucken ob ich mich irgendwo vertippt habe xD
Mache auch gleich noch ein Bildchen davon.
 

Kababär

Top Contributor
So, im Anhang ist jetzt ein Bild, hoffe das bringt jetzt Licht ins Dunkle :D

Links stehen die Accounts, rechts die dazugehörigen Transfers, untereinander, nicht in weiteren Spalten.
Die Frage ist halt: Wie füge ich für jedes Element Transfer eines Accounts eine neue Zeile ein?
 

Anhänge

  • Tabelle.JPG
    Tabelle.JPG
    26 KB · Aufrufe: 44

Kababär

Top Contributor
wenn die Zahl hinter dem : größer 1 ist dann zeichnest du einfach gar nichts.
Ich hatte diesen Part falsch verstanden. Ich dachte du meinst, dass dann die TransferListe nicht gezeichnet werden soll.. dabei soll dann der Account nicht gezeichnet werden.
Sorry :D So geht das natürlich :oops:

Das würde allerdings bedeuten, dass meine Datenmenge extrem wachsen würde.. gibt's keinen effizienteren Weg, das zu lösen?
 

Thallius

Top Contributor
Verstehe ich wieder nicht. Wieso erhöht sich deine Datenmenge? Im Model hast du doch weiterhin nur die Daten die du brauchst und gibst sie entsprechend an die anfragenden Tabelle.
 
Ä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
E JavaFX TableView mit Zeilenumbruch in Zellen AWT, Swing, JavaFX & SWT 5
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
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