Frage zu TableModel

Status
Nicht offen für weitere Antworten.

MQue

Top Contributor
Hallo,

Wenn ich mit dem Standard- TableModel nicht zufrieden bin, dann programmier ich mir selber eins.
Das interface TableModel hat ja die unteren Methoden, die implementiert werden müssen,
Was ich jetzt noch nicht ganz verstehe ist, gilt diese Model für alle Spalten, auch wenn ich in der ersten Spalte Strings, in der zweiten boolean, in der dritten mein eigenes Objekt usw. habe, wird das im TableModel mit der Methode getColumnClass(int columnIndex) {} gelöst oder kann ich auch sagen, für die erste Spalte eine TableModel, für die zweite Spalte ein TableModel usw.

Code:
public int getRowCount() {}
    public int getColumnCount() {}
    public String getColumnName(int columnIndex) {}
    public Class<?> getColumnClass(int columnIndex) {}
    public boolean isCellEditable(int rowIndex, int columnIndex) {}
    public Object getValueAt(int rowIndex, int columnIndex) {}
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {}
    public void addTableModelListener(TableModelListener l) {}
    public void removeTableModelListener(TableModelListener l) {}
 
Zuletzt bearbeitet von einem Moderator:
das table model gilt für die ganze tabelle, nicht nur für eine spalte.
aus diesem grund sind auch bei den informationen wo die spalte eine rolle spielt der index dabei...
getColumnName(int columnIndex) {}
 
Eine JTable hat genau ein TableModel. (am Rande: Ein TableModel kann aber mehrere JTables bedienen).

Du könntest Dir natürlich ein TableModel implementieren, welches dann wieder auf verschiedene TableModels delegiert.

Ebenius
 
ich empfehl dir aber nicht das interface zu implementieren, sondern das AbstractTableModel zu extenden....
da sind die listener methoden schon implementiert...
 
Was ich jetzt noch nicht ganz verstehe ist, gilt diese Model für alle Spalten, auch wenn ich in der ersten Spalte Strings, in der zweiten boolean, in der dritten mein eigenes Objekt usw. habe, wird das im TableModel mit der Methode getColumnClass(int columnIndex) {} gelöst oder kann ich auch sagen, für die erste Spalte eine TableModel, für die zweite Spalte ein TableModel usw.
wie schon vor mir gesagt wurde, gilt das bzw. ein TableModel für die ganze Tabelle. Allerdings kann man sich relativ leicht ein Interface ColumnModel definieren, mit einer passenden TableModel Implementierung, damit man quasi ein dynamisches TableModel auf höherem Level hat.

Slawa
 
wie schon vor mir gesagt wurde, gilt das bzw. ein TableModel für die ganze Tabelle. Allerdings kann man sich relativ leicht ein Interface ColumnModel definieren, mit einer passenden TableModel Implementierung, damit man quasi ein dynamisches TableModel auf höherem Level hat.

Slawa
Von dem Namen "ColumnModel" würde ich da aber abweichen, der wird im Umfeld der JTable ja schon anders benutzt.

Ebenius
 
Hier mal ein Beispiel:
Code:
package pack;
import javax.swing.table.*;
import java.util.*;
public class IndexModel extends AbstractTableModel 
{
	static final long serialVersionUID = 1;
	String[] columnNames = new String[4];
	ArrayList indizes = null;
	public IndexModel(ArrayList indizes)
	{
		this.indizes = indizes;
		columnNames[0] = "Name";
		columnNames[1] = "Creator";
		columnNames[2] = "Tbname";
		columnNames[3] = "Tbcreator";
	}
	public Object getValueAt(int row,int col)
	{
		Index ts = (Index) indizes.get(row);
		Object o = new Object();
		if (col == 0)
		{
			o = ts.name;
		}
		if (col == 1)
		{
			o = ts.creator;
		}
		if (col == 2)
		{
			o = ts.tbname;
		}
		if (col == 3)
		{
			o = ts.tbcreator;
		}
		return o;
	}
	public int getRowCount()
	{
		int i = indizes.size();
		return i;
	}
	public int getColumnCount()
	{
		int i = 4;
		return i;
	}
	public String getColumnName(int col)
	{
		return columnNames[col];
	}
	public void setValueAt(Object value,int row,int col)
	{
		
	}
	public boolean isCellEditable(int row,int col)
	{
		return true;
	}
}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben