# JTable - DefaultTableModel vs AbstractTableModel



## Hein_nieH (6. Dez 2012)

Hallo,

ich bin Java-Neuling und versuche mich mit Literatur im Selbststudium durchzuarbeiten.:rtfm:

Kurze Frage zu JTabel. Wenn ich die Tabellendaten in einem TabelModel verwalte: Wann benutze ich DefaultTableModel und wann benutze ich AbstractTableModel?
In den Literatur wird zu den Beispielen lediglich geschrieben das ein DefaultTableModel oder ein AbstractTableModel verwendet wird, ohne jedoch den Grund anzugeben.

Was ist der Unterschied?

Über eine schlüssige Antwort würde ich mich freuen.
Gruss Hein_nieH


----------



## SlaterB (6. Dez 2012)

AbstractTableModel ist ein halbes Interface, läßt die Speicherung/ Struktur von Daten noch völlig offen,
bietet aber schon die wichtige Funktionalität, Listener zu speichern, Events abzufeuern, das wird man kaum selber implementieren wollen,

DefaultTableModel bietet zusätzlich für die Speicherung von Daten einen Rahmen, regelt den Zugriff darauf 
(edit: und auch das Abfeuern von Events, damit die Table Änderungen mitbekommt),

man muss sich dann nur an die genauen Konventionen halten: 
Vector über Vector an Daten und Spaltennamen übergeben, siehe Beispiele


----------



## Michael... (6. Dez 2012)

Hein_nieH hat gesagt.:


> Wann benutze ich DefaultTableModel und wann benutze ich AbstractTableModel?


Je nach dem was besser passt ;-) Kommt auf den Zweck an.
Das DefaultTableModel ist ja ein AbstractTableModel in dem bereits alle Methoden und wichtigen Funktionen implementiert ist.
Wenn man also keine aussergewöhnlichen Anforderungen hat, kann man dieses einfach verwenden.
Wenn man von AbstractTableModel erbt, muss man vieles ersteinmal selbst implementieren.

Meiner Meinung ist es - vor allem für Anfänger - einfacher grundsätzlich immer direkt DefaultTableModel zu verwenden oder bei Anpassungen dieses zu erweitern. Auch wenn es jetzt nicht unbedingt mit der Vererbungsphilosophie (nur erben wenn man, den Funktionsumfang der Klasse erweitert) nicht ganz konform ist.


----------



## Marco13 (6. Dez 2012)

Ich würde es auch zuerst auf den Punkt beschränken: Das DefaultTableModel speichert die Daten selbst. Das AbstractTableModel stellt ("nur") die übrige Infrastruktur zur Verfügung, die man als TableModel eben so braucht. 
@Michael...: Wann sollte man von DefaultTableModel erben?


----------



## SlaterB (6. Dez 2012)

Marco13 hat gesagt.:


> @Michael...: Wann sollte man von DefaultTableModel erben?


na wenn z.B. diese Methoden zu festgefahren sind:

```
/**
     *  Returns <code>Object.class</code> regardless of <code>columnIndex</code>.
     *
     *  @param columnIndex  the column being queried
     *  @return the Object.class
     */
    public Class<?> getColumnClass(int columnIndex) {
	return Object.class;
    }

    /**
     *  Returns false.  This is the default implementation for all cells.
     *
     *  @param  rowIndex  the row being queried
     *  @param  columnIndex the column being queried
     *  @return false
     */
    public boolean isCellEditable(int rowIndex, int columnIndex) {
	return false;
    }
```
noch von AbstractTableModel, DefaultTableModel bietet dazu nichts


----------



## Hein_nieH (6. Dez 2012)

... Danke Jungs, dann habe ich erst einmal eine grobe Vorstellung.:applaus:
Da hätte man in der Literatur auch etwas erklären können.

Gruss Hein_nieH :-D


----------

