Swing jTable Reihen zuviel eingefügt

Ananaskirsche

Aktives Mitglied
Hallo erstmal,

ich arbeite momentan an folgendem: Ich habe ein 2D-Array. Dieses Array representiert 2 Teams mit je 5 Spielern. Nun möchte ich alle Spieler aus Team 1 ins 'blueTeamTable' packen und alle aus Team 2 ins 'redTeamTable'. Dazu habe ich folgenden Code geschrieben:

Java:
                String[][] test = api.getGameMembers();
              
                //Neues Tabellenmodell erzeugen (blau)
                DefaultTableModel blueTm = (DefaultTableModel) blueTeamTable.getModel();
              
                for(int i = 0; i < 5; i++)
                {
                    blueTm.addRow(new Object[] { test[0][i].toString(), 0 } );  
                }
              
                //Modell setzen
                blueTeamTable.setModel(blueTm);

                //Neues Tabellenmodell erzeugen (rot)
                DefaultTableModel redTm = (DefaultTableModel) redTeamTable.getModel();
              
                for(int i = 0; i < 5; i++)
                {
                    redTm.addRow(new Object[] { test[1][i].toString(), 0 } );
                }
              
                //Modelle setzen
                redTeamTable.setModel(redTm);

Wenn ich den Code ausführe, sieht mein Fenster aber so aus:
FehlerJava.png

Kann mir jemand sagen warum?
 
wahrscheinlich liegt es an der initialisierung der tables. Ich nehme mal an das redTeamTable und blueTeamTable identisch sind oder du das gleiche TableModel setzt. Aber da der Code fehlt ist das nur raten.

Gruß

Claus
 
Für die jTables habe ich ein DefaultTableModel erzeugt und diesen zugewiesen. Müssen es unterscheidliche sein? Eigentlich setzte ich ja neue Models, womit das 1. Model aufgehoben werden sollte, denke ich.
 
Eigentlich setzte ich ja neue Models, womit das 1. Model aufgehoben werden sollte, denke ich.
In deinem Codeauszug setzt du keine neuen Models. Du holst dir das aktuelle Model aus der Tabelle, speicherst es in einer Variablen zwischen und weist es der Tabelle anschliessend wieder zu. Falls beide Tabellen vorher dasselbe Model hatten, haben sie es hinterher immer noch. Meines Erachtens bewirken diese vier Zeilen also gar nichts:
Java:
DefaultTableModel blueTm = (DefaultTableModel) blueTeamTable.getModel();
blueTeamTable.setModel(blueTm);

DefaultTableModel redTm = (DefaultTableModel) redTeamTable.getModel();
redTeamTable.setModel(redTm);
 
Ahh jetzt geht es. Danke!
Was ist das denn für ein Schwachsinn, dass wenn man das selbe Model am Anfang nimmt, später die Models nicht unterschiedlich sein können, zumal ich sogar ein neues Model definiere. Egal...
 
Du solltest ganz dringend mal einen Grundlagenkurs OOP machen. Das was du da Schwachsinn nennst ist die Grundlage jeder objektorientierten Programmierung...
 
Ich habe vorher viel mit C# programmiert. Dort ist das Ganze aber anders gemanaged, was ich dort auch besser finde als in Java, aber das sind wohl die kleinen Unterschiede.
 
Was ist das denn für ein Schwachsinn, dass wenn man das selbe Model am Anfang nimmt, später die Models nicht unterschiedlich sein können
Sie können dann schon unterschiedlich sein. Dazu muss man aber auch ein anderes als das ursprüngliche Model zuweisen.
zumal ich sogar ein neues Model definiere
Im gezeigten Codeausschnitt hast du aber weder ein neues Model definiert, noch ein neues zugewiesen.
Eigentlich nicht. Falls dir noch nicht klar ist, warum sich dein Programm so verhalten hat, solltest du lieber nochmal versuchen, das nachzuvollziehen. Durch deine folgende Zeile wird der Variablen blueTM keine Kopie des Models von blueTeamTable zugewiesen, sondern eine Referenz auf dasselbe Model:
Java:
DefaultTableModel blueTm = (DefaultTableModel) blueTeamTable.getModel();
Beim Umgang mit Objekten ist es äusserst wichtig, zwischen "dasselbe" und "das Gleiche" zu unterscheiden.
 
Naja, für mich sagt die Zeile
Java:
DefaultTableModel blueTm = (DefaultTableModel) blueTeamTable.getModel();

folgendes: DefaultTableModel blueTm = Neue Instanz von DefaultTableModel mit dem Wert aus dem aktuellen Model.

Ich möchte hier aber selbsverständlich keinen Streit anfangen 🙂
 
Weder in Java noch in C# würdest du hier eine neue Objektinstanz erzeugen. Du holst dir nur das alte model und castest es zu einem DefaultTableModel.

(Außer das ganze wäre in C# eine struct anstatt einer klasse, was bei komplexen Objekten wie TabellenModellen wohl kaum der Fall ist)
 
Danke auf jeden Fall dann für die Belehrung 🙂, mein Problem jedenfalls ist gelöst. Und jeder weiß das noch kein Meister vom Himmel gefallen ist 🙂
 

Zurück
Oben