C
CaterPillar23
Gast
Hallo,
ich habe eine Tabelle, der ein TableModel (abgeleitet von AbstractTableModel) zugrunde liegt.
Das TableModel holt sich Daten aus einer ArrayList. Wird angezeigt, funktioniert alles toll.
Nun möchte ich über einen Button der ArrayList ein neues Objekt hinzufügen, danach soll sich die Tabelle mit aktualisieren. Ich bekomms nicht hin.
Google ergibt eigentlich immer nur "model.fireTableDataChanged vergessen, dann geht das". Die hätt ich aber, und auch in der setValue hab ich "fireTableCellUpdated(rowIndex, columnIndex);" eingetragen.
Ich hätte mal ein möglichst einfaches Beispiel vorbereitet:
Könnte mir bitte jemand den entscheidenden Anstoß geben, was ich vergessen habe?
ich habe eine Tabelle, der ein TableModel (abgeleitet von AbstractTableModel) zugrunde liegt.
Das TableModel holt sich Daten aus einer ArrayList. Wird angezeigt, funktioniert alles toll.
Nun möchte ich über einen Button der ArrayList ein neues Objekt hinzufügen, danach soll sich die Tabelle mit aktualisieren. Ich bekomms nicht hin.
Google ergibt eigentlich immer nur "model.fireTableDataChanged vergessen, dann geht das". Die hätt ich aber, und auch in der setValue hab ich "fireTableCellUpdated(rowIndex, columnIndex);" eingetragen.
Ich hätte mal ein möglichst einfaches Beispiel vorbereitet:
Java:
public class GUI {
public GUI() {
JFrame f = new JFrame();
final JTable tbl = new JTable();
JButton b = new JButton("hinzufuegen...");
final TableModel model = new TableModel();
tbl.setModel(model);
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Auto a = new Auto(4, "Audi", "A4");
Verwaltung.addAuto(a);
model.fireTableDataChanged();
}
});
f.add(tbl, BorderLayout.CENTER);
f.add(b, BorderLayout.SOUTH);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.pack();
f.setSize(500, 500);
}
public static void main(String[] args) {
Verwaltung.addAuto(new Auto(1, "VW", "Golf"));
Verwaltung.addAuto(new Auto(2, "AUDI", "A3"));
Verwaltung.addAuto(new Auto(3, "BMW", "316"));
new GUI();
}
}
class TableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
public int getRowCount() {
return 3;
}
public int getColumnCount() {
return 3;
}
public Object getValueAt(int row, int col) {
if (col == 0)
return Verwaltung.getFuhrpark().get(row).getNr();
if (col == 1)
return Verwaltung.getFuhrpark().get(row).getMarke();
if (col == 2)
return Verwaltung.getFuhrpark().get(row).getModell();
return "default";
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
Auto a = Verwaltung.getFuhrpark().get(rowIndex);
switch (columnIndex) {
case 0:
a.setNr(Integer.parseInt((String) aValue));
break;
case 1:
a.setMarke((String) aValue);
break;
case 2:
a.setModell((String) aValue);
break;
}
fireTableCellUpdated(rowIndex, columnIndex);
}
public void fireTableCellUpdated(int row, int column) {
fireTableChanged(new TableModelEvent(this, row, row, column));
}
}
Könnte mir bitte jemand den entscheidenden Anstoß geben, was ich vergessen habe?