TableModel Header wird nicht angezeigt

Swooptism

Mitglied
Hallo Leute

Ich habe ein eigenes TableModel das von der TableModel Klasse ableitet. Die Tabelle selbst ist, mit zwei Spalten, simpel aufgebaut. 1. Spalte = Checkboxen, 2. Spalte = Strings. Eigentlich funktioniert auch alles soweit bis auf die Spaltenheader die nicht angezeigt werden.
Die getCoulumnNames Methode ist überschrieben und sollte eigentlich die richtigen Spaltennamen zurückliefern desshalb verstehe ich nicht warum die nicht angezeigt werden.

Folgendermassen sieht das Model aus:

Java:
public class CheckBoxTableModelConfig implements TableModel
{
	private ArrayList<TableModelListener> listeners = new ArrayList<TableModelListener>();
	private ArrayList<Action> mActions = new ArrayList<Action>();
	private String[] colNames = {"Box","Actionname"};
	
	public void addAction(Action action)
	{
		int index = mActions.size();
		mActions.add(action);
		
		TableModelEvent e = new TableModelEvent(this, index, index,
				TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT);
		
		for(int i = 0, n = listeners.size(); i<n; i++)
		{
			((TableModelListener)listeners.get(i)).tableChanged(e);
		}
	}
	
	public int getRowCount() {
		return mActions.size();
	}

	public int getColumnCount() {
		return colNames.length;
	}

	public String getColumnName(int columnIndex) {
		return colNames[columnIndex];
	}

	public Class<?> getColumnClass(int columnIndex) {
		switch(columnIndex)
		{
			case 0: return Boolean.class;
			case 1: return String.class;
			default: return Object.class;
		}
	}

	public boolean isCellEditable(int rowIndex, int columnIndex) {
		switch(columnIndex)
		{
			case 0: return true;
			case 1: return false;
		}
		return false;
	}

	public Object getValueAt(int rowIndex, int columnIndex) {
		Action action = mActions.get(rowIndex);
		
		switch(columnIndex)
		{
			case 0: return action.getIsActivated();
			case 1: return action.getName();
		}
		return null;
	}

	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		if(columnIndex == 0 && aValue instanceof Boolean)
		{
			mActions.get(rowIndex).setIsActivated((Boolean)aValue);
		}
	}

	public void addTableModelListener(TableModelListener l) {
		listeners.add(l);
		
	}

	public void removeTableModelListener(TableModelListener l) {
		listeners.remove(l);
	}

}


Ich wäre froh wenn mir da jemand weiterhelfen könnte.

Gruss

Swoop
 
Hey,

setzt du die JTable in ein JScrollPane? Dann sollte der JTableHeader automatisch angezeigt werden.
Wenn nicht, musst du ihn explizit hinzufügen.

The scroll pane automatically places the table header at the top of the viewport. The column names remain visible at the top of the viewing area when the table data is scrolled.

If you are using a table without a scroll pane, then you must get the table header component and place it yourself. For example:

Java:
container.setLayout(new BorderLayout());
container.add(table.getTableHeader(), BorderLayout.PAGE_START);
container.add(table, BorderLayout.CENTER);
How to Use Tables (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
 
Danke für die Antwort

Ja die Tabelle setzte ich bereits auf eine Scrollpane:

Java:
panelPreActions.setLayout(new BorderLayout());
panelPreActions.add(labelPreActions, BorderLayout.NORTH);
panelPreActions.add([B]new JScrollPane().add(tablePreActions)[/B], BorderLayout.CENTER);

Daran sollte es also nicht liegen...
 
Mach doch mal so:
Java:
panelPreActions.add(new JScrollPane(tablePreActions), BorderLayout.CENTER);
 
An dem Model liegt es wohl nicht, muss an etwas anderem liegen.

####EDIT
Das add an der ScrollPane ist falsch, damit "zerstörst" Du das Layout der ScrollPane. Einfach die JTable direkt im Konstruktor übergeben - wie Camino gepostet hat.
 
Zuletzt bearbeitet:

Zurück
Oben