Swing JTable will sich einfach nicht aktualisieren

Status
Nicht offen für weitere Antworten.

Guardi

Bekanntes Mitglied
Hallo,

ich habe wirklich schon stundenlang hier und im Netz rumgelesen aber nichts funktioniert.
Ich hab mir folgende Hilfs-Methode geschrieben um neue TabellenDaten hinzuzufügen:

Java:
	protected void displayHandyData(Collection c, JTable table) {

		DefaultTableModel aModel = new DefaultTableModel() {
		//nur lesen
		@Override
		public boolean isCellEditable(int row, int column) {
		return false;
		}
		};
		//Spalten-Namen
		Object[] tableColumnNames = new Object[2];
		tableColumnNames[0] = "Handy";
		tableColumnNames[1] = "Preis in €";

		aModel.setColumnIdentifiers(tableColumnNames);
		if (c == null) {
		table.setModel(aModel);
		return;
		}
		Object[] values = new Object[2];
		
		Iterator<IHandy> it = c.iterator();
		//TableModel füllen
		while (it.hasNext()) {
		IHandy handy = it.next();
		values[0] = handy.getModell();
		values[1] = handy.getPreis();

		aModel.addRow(values);
		}

		//JTable ans modell binden
		aModel.fireTableDataChanged();
		aModel.fireTableStructureChanged();
		table.setModel(aModel);
		}

Wenn ich die Methode bei der Initialisierung der Klasse aufrufe mit einer Collection funktioniert alles wunderbar.
Wenn ich die Methode jedoch zur Laufzeit aufrufe wenn ich meine Daten aktualisieren will (wenn z.B. ein neues Handy hinzugekommen ist) wird mir ganz genau gar nichts angezeigt außer der Rahmen des JTable, sonst alles grau.

An der Collection die ich übergebe liegt es nicht, habs bereits getestet.

Wenn mir irgendjemand irgendwie weiterhelfen könnte wäre ich zu Dank verpflichtet.
 
Ok mir ist nun etwas aufgefallen. Das Problem scheint ganz woanders zu liegen.
Ich habe ein JPanel das am Anfang ein Mal initialisiert wird und dann in einer statischen Referenz gespeichert wird. Dieses JPanel ist im JFrame als TappedPane integriert.
Wenn ich nun zur Laufzeit das JPanel verändere (also das im TabbedPane) so wird es nicht neu gezeichnet.
Das sieht ungefähr so aus.

[Java]
class MainWindow extends JFrame{
...
warenkorb = new WarenkorbPanel(h.createWarenkorb());
mainTabbedPane.addTab("Warenkorb", null, warenkorb, null);
}

class WarenkorbPanel extends JPanel {

protected static WarenkorbPanel WPANEL = new WarenkorbPanel(W);

public WarenkorbPanel(IWarenkorb w){
super();
h = Handyshop.getInstance();
WarenkorbPanel.W = w;
initPanel();
}
initPanel(){...}
}
[/code]

Mache ich irgendwas elementares falsch? warum wird das JPanel nicht neu gezeichnet wenn ich z.B this.repaint() aufrufe
 
Falls das Layout geändert wurde, könnte ein revalidate() nötig sein, eventuell gefolgt von repaint(). Aber das ist nur ins Blaue geraten. Im Fragment sieht man ja nicht, wo und aus welchem Grund repaint() überhaupt aufgerufen wird.
 
Das war zwar nicht die Antwort auf meine Frage, du hast mich aber zum Nachdenken gebracht.

Tatsächlich muss das WarenkorbPanel selbst die Action für die Aktualisierung der Tabelle feuern. Damit meine ich nicht die fire Methoden sondern meine eigene update() Methode. Dies war bei mir vorher nicht der Fall. Ich habe dieses Problem nun behoben und es funktioniert alles einwandfrei.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben