JTable - Spaltennamen wirklich umbenennen

Kerwin

Erfahrenes Mitglied
Hallo,

ich habe einen JTable, welcher von vorn herein irgendwelche Spaltennamen hat (logisch ^^). Nun will ich gern zur Laufzeit die Spaltennamen ändern (Bsp English<->Deutsch). Klappt ja auch soweit erst einmal, jedoch mit einem kleinen (für mich großes) Problem. Er ändert zwar den Namen der Spalte optisch, jedoch wenn ich den Spaltenname abfrage, steht noch der alte Wert drin.
Ich hab hier mal ein kleines Codebeispiel vorbereitet.

Auf der Konsole wird mir die 1 statt BlaBla ausgegeben. In der Darstellung jedoch (Frame) wird BlaBla angezeigt.
Hat jemand eine Ahnung, wie ich nun den neuen Spaltennamen herausfinden kann?

Code:
import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;


public class TestTable extends JFrame{
	String[][] _unit_data = {
			{  "1", "4",  "7"},
			{  "2", "5",  "8"},
			{  "3", "6",  "9"}};

	String [] _unit_rdata = { "1", "2", "3"};
	
	JPanel panel;
	
	public static void main(String args[]){
		TestTable tt = new TestTable();
		tt.createPanel();
	}
	
	public void createPanel(){
		this.setSize(300,300);
		panel = new JPanel(new BorderLayout());
		JTable tab = new JTable(_unit_data, _unit_rdata);
		panel.add("Center", new JScrollPane(tab));
		this.add(panel);
		this.setVisible(true);
		this.show();
		tab.getColumnModel().getColumn(0).setHeaderValue("BlaBla");
		System.out.println(tab.getColumnName(0));
	}
}
 
Moin!
Statt
Code:
        System.out.println(tab.getColumnName(0));

versuchs doch mal lieber mit
Code:
        System.out.println(tab.getColumn(0).getHeaderValue());

*grüssle*
MeinerEiner
 
Ja, daran hab ich irgendwie net gedacht ;)

Als Eränzung zu dem was du geschrieben hast. Du musst noch das getColumnModel() mitgeben
Code:
System.out.println(tab.getColumnModel().getColumn(0).getHeaderValue());

Danke dir :)
 
Hi,
für die Spaltennamen ist das maßgeblich, was das TableModel mit der Methode getColumnName( int iColumnIndex) an die JTable liefert.
Wenn du im TableColumnModel etwas änderst, betrifft das nur die Darstellung, nie die Daten selbst.
Wenn du also wirklich die Spaltennamen ändern willst, musst du dir das TableModel holen (<JTable>.getTableModel()), casten auf DefaultTableModel, und mit der Methode <DefaultTableModel>.setColumnIdentifiers(Object[] newIdentifiers) neue Spaltenbezeichner vergeben.
Gruß
testalucida
 
Zurück