PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : JTable, Update des Tabelleninhalts



Baui1984
12-05-2009, 17:19
Hallo,

ich habe ein Problem mit einer Programmierübung von der Uni.
Wir sollten eine einfache Fahrzeugverwaltung in Java realisieren und diese nun um eine GUI erweitern.
Die Fahrzeuge speichere ich in einer LinkedList, um diese in einer Tabelle darzustellen speicher ich diese in einem Object[][], das funktioniert soweit.
Wenn ich das Programm starte ist die Liste leer, das Object[][] also auch. Die Tabelle wird mit den Spaltenüberschriften korrekt angezeigt.
Natürlich sollen der Tabelle Zeilen hinzugefügt oder gelöscht werden, wenn ich ein Fahrzeug anlege oder lösche, und da stecke ich gerade fest.
Nach dem Anlegen oder Löschen eines Fahrzeugs kopiere ich die Liste wieder in ein Object[][], aber alle Versuche die Tabelle zu aktualisieren schlagen fehl.

Hier der Code der Tabelle (als PHP-Code, für zumindest ein wenig Highlighting):

String[] tableColumns = { "Type", "ID", "FIN", "Name", "Information" };
Object[][] data = LogicAccess.getManagement().toTable(LogicAccess.ge tManagement().getVehicleList());
JTable table = new JTable(data, tableColumns);
JScrollPane scroll = new JScrollPane(table);
JPanel cp = new JPanel();
cp.setLayout(new BorderLayout());
cp.add(table.getTableHeader(), BorderLayout.PAGE_START);
cp.add(scroll, BorderLayout.CENTER);
cp.add(scroll);
center.add(cp);

Hier noch ein ActionListener aus der GUI Klasse:

car_button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
Add a = new Add(0);
a.run();
} catch (InvalidTypeException ex) {
JOptionPane.showMessageDialog(null, ex, "Error", 0);
}
}
});

Und ein Auszug der Methode run() der Klasse Add:

ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String FIN = text_fin.getText();
String name = text_name.getText();
String initReg = text_initreg.getText();
LogicAccess.getManagement().add(FIN, name, initReg);
f.setVisible(false);
Object[][] data = LogicAccess.getManagement().toTable(LogicAccess.ge tManagement().getVehicleList());
}
});

Einen Screenshot der GUI hänge ich noch an, vielleicht ist er hilfreich. Sollten wichtige Infos fehlen reiche ich die nach, hoffe ich hab erstmal nichts wichtiges vergessen.

Freu mich wenn mir jemand helfen kann.

Gruß Jan

mwanaheri
12-05-2009, 19:45
Also was die LogicAccess-Klasse macht, weiß ich nicht, aber ich würde erwarten, dass die Daten (data) an das Tabellenmodell übergeben werden bzw. dass mit den Daten ein neues Tabellenmodell gebaut wird, das an der Tabelle gesetzt wird
(table.setModel...)

Baui1984
12-05-2009, 21:02
Vielen Dank! So scheint's zu funktionieren.
Hatte Model vorher ignoriert, dachte das hätte damit nichts zu tun. Muss wohl mehr an meinem Englisch arbeiten ;)