JTable Header wird nicht angezeigt ohne ScrollPane

Spin

Top Contributor
Hallo meine JTabel zeigt keinen Header an ohne der JScrollPane , warum?

Java:
this.table = new JTable();
		this.table.setModel(GameController.getInstance().getHighScoreData());
		this.table.setEnabled(false);
		
		this.tablePanel = new JPanel();
		this.tablePanel.add(this.table);


Model:#
Java:
package model;

import java.util.ArrayList;

import javax.swing.table.*;

/**
 * Class HighScoreData 
 */
public class HighScoreData extends AbstractTableModel {

	/**
	 * serial version uid
	 */
	private static final long serialVersionUID = 1L;
	
	/**
	 * column names
	 */
	private String[] columnNames = {
			"Player:", "Score:", "Victories:"
	};
	
	/**
	 * list of player
	 */
	private ArrayList<Player> playerList 		= null;
	
	/**
	 * Default Constructor
	 * @param {@code ArrayList<Player> playerList} - playerList
	 */
	public HighScoreData(ArrayList<Player> playerList) {
		this.playerList = playerList;
	}

	@Override
	public String getColumnName(int column) {
		return this.columnNames[column];
	}
	
	
	@Override
	public int getColumnCount() {
		return this.columnNames.length;
	}

	@Override
	public int getRowCount() {
		return playerList.size();
	}

	@Override
	public Object getValueAt(int row, int col) {
		
		switch(col){
			case 0 : return playerList.get(row).getName();
			case 1 : return playerList.get(row).getScore();
			case 2 : return playerList.get(row).getVictory();
		}
		return null;
	}

}

Danke für schnelles Feedback.

Nimmt man mal einmal Swing Table , hat man nur Ärger 😉
Bin wohl gerade blind oder finde den trick nicht XD .

grüße spin
 
Doch:
How to Use Tables (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
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:

container.setLayout(new BorderLayout());
container.add(table.getTableHeader(), BorderLayout.PAGE_START);
container.add(table, BorderLayout.CENTER);

Soll heißen, du musst this.table.getTableHeader() zusätzlich hinzufügen!
 
Nimmt man mal einmal Swing Table , hat man nur Ärger 😉

Im Gegensatz zu den Datenzellen soll ein Header (egal ob Columnheader oder Rowheader) ja nie mitscrollen. Deshalb werden wohl standardmäßig solche Header nicht direkt an die JTable gekoppelt, sondern an die JScrollPane, in der die JTable drin liegt. Eine gewisse Logik kann man demnach sogar der bei der Swing Table erkennen 😀.

Gruß,
André
 

Zurück
Oben