TableView füllen

wolfin96

Mitglied
Hallo miteinander! Ich möchte bei meinem Programm einen TableView einfügen, der die verfügbaren Objekte anzeigt, im weiteren Verlauf soll man dann auch Objekte hinzufügen und löschen können, das ist momentan aber erstmal noch nicht das Problem, so weit bin ich leider noch nicht. Ich habe gerade versucht den TableView zu initialisieren und zur Probe ein paar Objekte erstellt und versucht mir anzeigen zu lassen. Dies klappt allerdings noch nicht. Ich habe eine Vermutung woran es mitunter liegen könnte (wie im Text markiert). Die Tabelle wird mit Objekten gefüllt die über ein Interface definiert werden. Bei den Objekte selbst (rund, rechteckig, quadratisch) wird jeweils die Form in der Klasse vordefiniert und das Gewicht in der Klassenmethode entsprechend berechnet (siehe weiter unten).
Vielleicht kann mir ja jemand weiterhelfen und mir sagen, warum die Daten nicht in der Tabelle dargestellt werden. Vielen Dank schon mal!

Hier erstmal der Code vom Tableview:
Java:
    @FXML private TableView<ISpielstein> tableView;
    @FXML private TableColumn<ISpielstein, String> formSpalte;
    @FXML private TableColumn<ISpielstein, Double> gewichtSpalte;  


public void initialize(URL url, ResourceBundle rb) {
        formSpalte.setCellValueFactory(new PropertyValueFactory<ISpielstein, String>("form"));
        //Hier könnte unter anderem der Fehler sein; die Variable Gewicht ist ein double
        gewichtSpalte.setCellValueFactory(new PropertyValueFactory<ISpielstein, Double>("gewicht"));
       
        tableView.setItems(getHaufen());
    }

//Habe hier ein paar Objekte zum Testen erstellt
    Rund rund  = new Rund(21);
    Rechteckig rechteckig = new Rechteckig(10, 43);
    Quadratisch quadratisch = new Quadratisch(54);
   
//Und hier zur ObservableList hinzugefügt, welche den TableView füllen soll
    public ObservableList<ISpielstein> getHaufen(){
        ObservableList <ISpielstein> steine = FXCollections.observableArrayList();
       
        steine.add(rechteckig);
        steine.add(quadratisch);
        steine.add(rund);
       
        return steine;
    }

Hier der Code beispielhaft von einem der drei Objekte, da sie sich im Grunde kaum unterscheiden (Die Variable Dichte wird im entsprechenden Interface definiert):
Java:
//erstellen der Klasse Quadratisch welche die Schnittstelle ISpielstein implementiert
public class Quadratisch implements ISpielstein {

    //Variable Seitenlaenge des quadratischen Spielsteins
    private double laenge;
   
    //Variable Breite ist gleich der Laenge, da es sich um eine quadratische Grundfläche handelt
    private double breite = laenge;
   
    //Variable fuer das Gewicht des Spielsteins
    public double gewicht;
       
    //Variable fuer die Form des Spielsteins, wird vorab definiert
    public String form = "Quader (quadratisch)";

    /*Konstruktor der Klasse Quadratisch, wird in der Main Methode zum Erstellen eines Spielsteins aufgerufen
    *wird, bekommt vom dort implementierten Scanner die Laenge und die Nummer übergeben
    */
    public Quadratisch(double laenge) {
        this.laenge = laenge;
    }

    //Setter fuer die Laenge
    public void setLaenge(double laenge) {
        this.laenge = laenge;
    }
   
    //Setter fuer die Breite
    public void setBreite(double breite) {
        this.breite = breite;
    }

    //Getter fuer die Form
    @Override
    public String getForm() {
        return form;
    }

    //Getter für das Gewicht; hier wird das Spielsteingewicht berechnet und anschliessend gerundet
    @Override
    public double getGewicht() {
        gewicht = breite * laenge * HOEHE * DICHTE;
        gewicht = Math.round(100.0 * gewicht) / 100.0;
        return gewicht;
    }

    //toString Methode gibt die wichtigsten Informationen des Spielsteins als String zurueck
    @Override
    public String toString() {
        return "Form: " + form + ", Gewicht: " + getGewicht() + "g";
    }  
}
 

missy72

Bekanntes Mitglied
Du must für die Paramenter, die du in der ObservableList auflisten möchtes, eine Property-Klasse verwenden.
[CODE lang="java" title="nicht"]private double laenge;[/CODE]
[CODE lang="java" title="sondern"]private SimpleDoubleProperty laenge;[/CODE]

Du kannst der Klasse weiterhin ein ganz einfaches double übergeben, bzw. abrufen. Entsprechend müssen aber die Getter und Setter angepasst werden.
[CODE lang="java" title="get & set"]public Double getLaenge() {
return laenge.get();
}

public void setLaenge(double laenge) {
this.laenge.set(laenge);
}
[/CODE]
 

missy72

Bekanntes Mitglied
Ach ja. Der Getter ist essentiell. Ohne den funktioniert die Liste nicht.
Und ich nehme an, ich habe es noch nicht ausprobiert, sagt mir aber die Logik, den Setter benötigst du später fürs Ändern.
MfG Missy.
 

mrBrown

Super-Moderator
Mitarbeiter
Was heißt denn "klappt nicht"? Wird gar nichts in der Tabelle angezeigt, oder werden keine Werte in den Zellen angezeigt, oder werden nur einzelne Zellen nicht angezeigt?

Auf jeden Fall gibt es Fehler in der Quadratisch-Klasse, das was du in Zeile 8 versuchst klappt so nicht :)

Du must für die Paramenter, die du in der ObservableList auflisten möchtes, eine Property-Klasse verwenden.
Nein, können auch "normale" Typen sein :)
 

wolfin96

Mitglied
Ach ja. Der Getter ist essentiell. Ohne den funktioniert die Liste nicht.
Und ich nehme an, ich habe es noch nicht ausprobiert, sagt mir aber die Logik, den Setter benötigst du später fürs Ändern.
MfG Missy.
Danke erstmal für die Hilfe! Jetzt habe ich noch das Problem, dass ich mit den Werten von Laenge und Breite das Gewicht berechnen muss, das geht aber scheinbar nicht so einfach mit SimpleDoublePropertys wie mit normalen double Werten wenn ich das jetzt richtig gesehen habe. Gibts da eine Möglichkeit trotzdem mit SimpleDoublePropertys zu rechnen oder muss ich die erst wieder zurück zu double casten?
 

wolfin96

Mitglied
Was heißt denn "klappt nicht"? Wird gar nichts in der Tabelle angezeigt, oder werden keine Werte in den Zellen angezeigt, oder werden nur einzelne Zellen nicht angezeigt?

Auf jeden Fall gibt es Fehler in der Quadratisch-Klasse, das was du in Zeile 8 versuchst klappt so nicht :)


Nein, können auch "normale" Typen sein :)
Es werden gar keine Werte in der Tabelle angezeigt. Hast du eine Idee wo das Problem da liegen könnte?
Habe es jetzt mal probiert wie missy72 beschrieben hatte mit dem SimpleDoubleProperty, da ist jetzt aber das Problem mit dem rechnen entstanden. Hättest du da vielleicht noch eine Idee?
 

mrBrown

Super-Moderator
Mitarbeiter
Es werden gar keine Werte in der Tabelle angezeigt. Hast du eine Idee wo das Problem da liegen könnte?
Gibt es Fehler auf der Konsole?

Hat die Tabellen keiner Spalten/keine Zeilen/leere Zeilen? Das sollte jeweils anders aussehen und Aufschluss über den Fehler geben.

Der Oben gezeigte Code ist auf jeden Fall nicht Quelle des Problems, der funktioniert grundsätzlich korrekt, solange die FXML-Datei und die etwaige module-info korrekt sind.

Habe es jetzt mal probiert wie missy72 beschrieben hatte mit dem SimpleDoubleProperty, da ist jetzt aber das Problem mit dem rechnen entstanden. Hättest du da vielleicht noch eine Idee?
Keine Propertys benutzen, wenn du diese nicht brauchst :)
 

missy72

Bekanntes Mitglied
Im Zweifelsfall an mrBrown halten. Ich programmiere ja auch erst seit Januar.

Mein Kenntnisstand war, dass man für die ListView eine ObservableList braucht und die Elemente aus der Property-Klasse erstellen soll/muss.

Du kannst die Berechnungen ganz normal mit dem Standard DOUBLE durchführen und den dann dem Setter der Klasse übergeben.
Ich zitiere mich mal selbst.
Du kannst der Klasse weiterhin ein ganz einfaches double übergeben, bzw. abrufen. Entsprechend müssen aber die Getter und Setter angepasst werden.
Java:
public Double getLaenge() {
return laenge.get();
}

public void setLaenge(double laenge) {
this.laenge.set(laenge);
}
 
Zuletzt bearbeitet:

missy72

Bekanntes Mitglied
Ok. Es ist so. es geht auch ohne die Property-Klasse.
Ich habe gerade mal eine Variable aus meinem aktuellen Programm umgeschrieben und funktioniert trozdem.
Dann muss ich noch mal gucken für was die Proberties eigentlich gut sind.
 

missy72

Bekanntes Mitglied
Ist zwar nicht mein Beitrag, aber ich finde das gehört hier zu.
@mrBrown. Ist es korrekt, dass die Property-Klassen benötigt werden, wenn ich über die TableView Änderungen vornehmen möchte, damit mein Objekt eine Rückmeldung bekommt? Wenn ja, dann sollte Wolfin96 schon in weiser Voraussicht, zumindest die Variablen, die später über die TableView geändert werden sollen, aus der Property-Klasse verwenden.

Ich glaube ich muss ins Bett. Ich wünsche eine gute Nacht.
 

wolfin96

Mitglied
Gibt es Fehler auf der Konsole?
(Wenn ich das Programm starte, werde ich darauf hingewiesen, dass Fehler im Projekt existieren. Wenn ich mir aber die einzelnen Controller und Klassen anschaue, werden dort keine angezeigt.
In der Konsole selbst werden beim Starten selbst Fehler angezeigt, die aber verschwunden sind, sobald das Programm geöffnet ist. Kann sie deswegen auch nicht hier zeigen...)
Muss hier nochmal korrigieren, nachdem ich Eclipse jetzt nochmal neu gestartet habe öffnet sich das Programm ohne jeglichen Hinweis auf Fehler und es wird auch nichts ungewöhnliches auf der Konsole angezeigt.

Hat die Tabellen keiner Spalten/keine Zeilen/leere Zeilen? Das sollte jeweils anders aussehen und Aufschluss über den Fehler geben.
Die Tabelle sieht nach dem Starten aus, wie auf dem Bild unten. Die Spalten habe ich jeweils mit formSpalte und gewichtSpalte im Scenebuilder bei fx:id verbunden genauso wie die Tabelle selbst mit dem tableView.
Screenshot 2021-03-19 102756.jpg
Der Oben gezeigte Code ist auf jeden Fall nicht Quelle des Problems, der funktioniert grundsätzlich korrekt, solange die FXML-Datei und die etwaige module-info korrekt sind.


Keine Propertys benutzen, wenn du diese nicht brauchst :)
Was meinst du mit module-info?
 
Zuletzt bearbeitet:

missy72

Bekanntes Mitglied
Ich sollte mit meinem Halbwissen jetzt ein bisschen vorsichter sein, aber Folgendes kann mrBrown mit module-info meinen.

Die FXML-Datei braucht eine Info mit welcher Klasse sie interagieren soll.
Das kann man direkt in die FXML schrieben, oder im SceneBuilder auswählen.


1616148448640.png


1616148315094.png
 
Zuletzt bearbeitet:

missy72

Bekanntes Mitglied
Um die Tabelle erstmal zum Laufen zu bringen, würde ich Fehlerquelle wie z.B. die Berechnungen weglassen und
den Variablen beim Deklarieren gleich einen Wert zuweisen. (hier ohne Property)
[CODE lang="java" title="Beispiel"]this.breite = 12.5;
this.laenge = 12.5;[/CODE]
 
Zuletzt bearbeitet:

missy72

Bekanntes Mitglied
Auf Youtube gibt es was dazu. Folge 57 und 58.
Die beiden Folgen habe ich mir nicht angeguckt, aber die Videos aus der Reihe sind recht verständlich.
 

mrBrown

Super-Moderator
Mitarbeiter

mrBrown

Super-Moderator
Mitarbeiter
@mrBrown. Ist es korrekt, dass die Property-Klassen benötigt werden, wenn ich über die TableView Änderungen vornehmen möchte, damit mein Objekt eine Rückmeldung bekommt? Wenn ja, dann sollte Wolfin96 schon in weiser Voraussicht, zumindest die Variablen, die später über die TableView geändert werden sollen, aus der Property-Klasse verwenden.
Jein – wenn es Propertys sind, bekommt die Tabelle Änderungen der Werte direkt mit. Das kann man zB nutzen, wenn man Werte über die Tabelle selbst editieren will, man muss aber noch ein bisschen mehr machen, als nur das.

Der Nachteil ist aber eben, dass man dann alles als Properties umsetzen muss – in den meisten Fällen will man als Model aber ein "einfaches" Java-Objekt und nicht ein extra für die View angepasstes. Wenn man also Properties nutzt, sollte man direkt ein Architekturmuster wie MVVM nutzen, mit welchem man sowohl ein einfaches Model als auch Properties nutzt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
izoards JavaFX TableView mit Array Inhalt füllen AWT, Swing, JavaFX & SWT 1
Juelin setzen background color für selected Row im Tableview AWT, Swing, JavaFX & SWT 21
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
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
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
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

Ähnliche Java Themen

Neue Themen


Oben