JTable updaten

Nemesys88

Bekanntes Mitglied
Guten Tag!

Ich brauche bitte Hilfe mit meiner JTable / DefaultTableModel.
Und zwar habe ich eine Klasse namens Tables (s.u.), wo eine JTable drin ist und bei Programmstart befüllt wird.
Und dann hab ich noch eine Klasse, nennen wir sie "Klasse X" in der die Daten (die aus einer Datenbank eingelesen werden) verändert werden.

Was ich machen möchte: Nachdem die Daten verändert wurden soll die JTable aktualisiert werden.

Wie man unten sieht hab ich es (unter anderem) mit einem TableModelListener und der Funktion fireTableDataChanged(); probiert, die leider einfach mal garnix tut. Oder muss man die noch irgendwie anstoßen, wenn ja wie ?

Welchen Weg empfehlt ihr mir um die JTable (die ja nun leider in einer anderen Klasse liegt) zu updaten?

Danke schonmal. 🙂

mfG

Java:
public class Tables extends JPanel {
	
	private static final long serialVersionUID = 1L;
	
	private JScrollPane tabelle_fleisten;
	private JTable contenttable_fleisten;
	private DefaultTableModel model_fleisten;
	private JPanel panel_fleisten;
	
	private Fleiste[] fleisten_liste = new Fleiste[2000];


	public Tables () 
	{
		
		// set up FlowLayout
		setLayout(new FlowLayout());

		// Tabelle anlegen und initialisieren
		
    	Data daten = Data.getInstance();
		
		fleisten_liste = daten.getFleisten();
		
		model_fleisten = new DefaultTableModel();
		model_fleisten.addColumn("Bezeichnung");
		model_fleisten.addColumn("Beschichtung");
		model_fleisten.addColumn("Identnummer");
		model_fleisten.addColumn("Preis");
		
    	for (Fleiste k : fleisten_liste)
		{
			if (k!= null) 				
			{
				model_fleisten.addRow(new Object[]{k.getBezeichnung(),k.getBeschichtung(),k.getIdentnummer(), k.getPreis()});	
			}
			else
			{
				break;
			}
		}

	
		tabelle_fleisten = new JScrollPane();
		contenttable_fleisten = new JTable(model_fleisten);
		panel_fleisten = new JPanel();
		panel_fleisten.setBorder (BorderFactory.createTitledBorder (BorderFactory.createEmptyBorder(),
                "Führungsleisten",
                TitledBorder.CENTER,
                TitledBorder.TOP));
		panel_fleisten.add(tabelle_fleisten);
		add(panel_fleisten);
		tabelle_fleisten.add(contenttable_fleisten);
		tabelle_fleisten.setViewportView(contenttable_fleisten);

//		model_fleisten.addTableModelListener(new TableModelListener() {
//			
//			@Override
//			public void tableChanged(TableModelEvent TME) {			
//				model_fleisten.fireTableDataChanged();
//			}
//		});
		
		updateUI();
		
	}
	
}
 
Zuletzt bearbeitet:
Ok hab's mit folgendem Hinweis geschafft:

You don't refresh the table, you refresh the table model. So your class needs a reference to the table. Then you simply do:

DefaultTableModel model = new DefaultTableModel(...);
table.setModel( model );

dann musste ich in meiner Tables nur nen Getter für die JTable anlegen:

Java:
	public static JTable getContenttable_fleisten() {
		return contenttable_fleisten;
	}

und in der anderen Klasse:

Java:
model = new DefaultTableModel();

dann die neuen Daten einlesen und später

Java:
tabelle = Tables.getContenttable_fleisten();
						tabelle.setModel( model );

Das funktioniert soweit. 🙂
 
Hab's jetzt doch nochmal anders gemacht... weil es recht kompliziert geworden wäre überall die Tabellen einzeln zu updaten... das ganze gehört zu einem inzwischen recht großen Programm mit so einigen Tabellen...

Hab in meinem MainFrame mir jetzt ne Funktion geschrieben die so aussieht:

Java:
public static void update() 
{
	tp.remove(p2);
	p2 = new Tables();
	tp.add("Tabellen", p2);
	tp.setSelectedComponent(p2);
}

tp ist eine tabbedPane, in der der Benutzer quasi zwischen Hauptfenster und Tabellenansicht wechseln kann.

Die kann ich im ganzen Programm mit
Java:
MainFrame.update();
aufrufen und er aktualisiert mir alle Tabellen in meiner Tables - Klasse.

Also hab ich das updaten der Tabellen jetzt so zu sagen einfach so gelöst, das ich das JPanel mit den Tabellen remove, neu initialisiere und dann wieder adde.

Wollte mal fragen ob das irgendwie "unsauber" ist oder man aus welchen Gründen auch immer nicht so machen sollte... ?!
 

Neue Themen


Zurück
Oben