Hallo,
ich versuch mich nun schon ein Weilchen ergebnislos an folgendem Problem:
Ich habe ein Tabellenmodel, in dem ich die Daten in einer Map speichere (auszug):
Eine abgeleitete Klasse übergibt als nur den Tabellenkopf.
Die Tabelle ist zu begin leer, damit der Nutzer sie mit Daten füllen kann. Nun habe ich, damit man den Inhalt der Tabelle speichern kann, die Methode getTableData hinzugefüht. Ich speichere somit die Map weg. Das geht problemlos. Nun möchte ich sie jedoch auch wieder einlesen können. Ich dachte, dass ich dies einfach über setTableData realisieren kann, in dem ich die Map einfach überschreibe. Problem ist nun, dass ich diese Daten nicht sehe. Die direkte Testausgabe (getValueAt(1,1) ) liefert noch den gelesenen Inhalt, in der Tabelle selbst sehe ich aber die Daten nicht. Was muß ich, damit ich meine eingelesenen Daten in der Tabelle auch sehe?
Gruß Micha
ich versuch mich nun schon ein Weilchen ergebnislos an folgendem Problem:
Ich habe ein Tabellenmodel, in dem ich die Daten in einer Map speichere (auszug):
Code:
public abstract class RawDataTableModel extends AbstractTableModel {
private static final long serialVersionUID = -5821674686007492366L;
private Map<String, Object> data = new Hashtable<String, Object>();
private int row=0, col=0;
private String[] tableHead;
public RawDataTableModel(String[] tableHead) {
this(tableHead, 20);
}
public RawDataTableModel(String[] tableHead, int row) {
//super(tableHead, row);
this.row = row;
this.col = tableHead.length;
this.tableHead = tableHead;
}
/**
* Fuegt eine leere Zeile an die
* Tabelle an.
*
*/
public void addRow(){
this.row++;
}
/**
* Liefert <code>true</code>, wenn die Tabelle keinen Inhalt hat
* @return isEmptyTable
*/
public boolean isEmpty() {
return this.data.isEmpty();
}
/**
* Liefert die Klasse der Spalte
* @param columnIndex
* @return columnClass
*/
@Override
public Class<?> getColumnClass(int columnIndex) {
if (columnIndex <= 1)
return String.class;
else if(columnIndex == this.getColumnCount()-1)
return Boolean.class;
return Double.class;
}
/**
* Gibt <code>true</code> zurueck, wenn
* die Zelle editierbar ist.
* @param rowIndex
* @param columnIndex
* @return isCellEditable
*/
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (rowIndex==this.getRowCount()-1)
this.addRow();
return rowIndex < this.getRowCount() && columnIndex < this.getColumnCount();
}
/**
* Liefert die Anzahl der Zeilen
*/
@Override
public int getRowCount() {
return this.row;
}
/**
* Liefert die Anzahl der Spalten
*/
@Override
public int getColumnCount() {
return this.col;
}
/**
* Gibt die Spaltenkopfbezeichnung der Spalte <code>columnIndex</code> zurueck
* @param columnIndex
* @return tableHead
*/
@Override
public String getColumnName(int columnIndex) {
return this.tableHead[ columnIndex ];
}
@Override
public void setValueAt(Object value, int rowIndex, int colIndex) throws IndexOutOfBoundsException {
if (rowIndex < 0 || colIndex < 0 || colIndex >= this.col)
throw new IndexOutOfBoundsException(this.getClass() + " Unzulaessige Zellenangabe!");
if (rowIndex == this.row-1)
this.addRow();
String key = "[" + rowIndex + ", " + colIndex + "]";
if (value == null)
this.data.remove( key );
else {
this.data.put(key, value);
if (colIndex != this.col-1)
this.data.put("[" + rowIndex + ", " + (this.col-1) + "]", true);
}
}
@Override
public Object getValueAt(int rowIndex, int colIndex) {
if (rowIndex < 0 || colIndex < 0 || rowIndex >= this.row || colIndex >= this.col)
throw new IndexOutOfBoundsException(this.getClass() + " Unzulaessige Zellenangabe!");
String key = "[" + rowIndex + ", " + colIndex + "]";
return this.data.get( key );
}
/**
* Liefert eine Hashtable mit dem Inhalt der Tabelle
* @return data
*/
public Map<String, Object> getTableData() {
return this.data;
}
/**
* Setzt eine Hashtable mit dem Inhalt der Tabelle
* @return data
*/
public void setTableData(Map<String, Object> newData) {
//this.clearData();
this.data = newData;
System.out.println("DEBUG " +this.getValueAt(1,1));
}
}
Eine abgeleitete Klasse übergibt als nur den Tabellenkopf.
Die Tabelle ist zu begin leer, damit der Nutzer sie mit Daten füllen kann. Nun habe ich, damit man den Inhalt der Tabelle speichern kann, die Methode getTableData hinzugefüht. Ich speichere somit die Map weg. Das geht problemlos. Nun möchte ich sie jedoch auch wieder einlesen können. Ich dachte, dass ich dies einfach über setTableData realisieren kann, in dem ich die Map einfach überschreibe. Problem ist nun, dass ich diese Daten nicht sehe. Die direkte Testausgabe (getValueAt(1,1) ) liefert noch den gelesenen Inhalt, in der Tabelle selbst sehe ich aber die Daten nicht. Was muß ich, damit ich meine eingelesenen Daten in der Tabelle auch sehe?
Gruß Micha