# Spaltenüberschriften in JTable setzen. WIE?



## gondor (28. Feb 2005)

hallo!

ich habe ein problem.

ich erzeuge ein tableModel. dieses setze ich wie folgt:


```
/*Tabellen-Model*/
C_TableModel tmdl = measurement_manager.getMeasurementTable(...)

JTable table = new JTable();
table.setModel(tmdl);
```

die dazugehörige spalten liegen in einem object[] (spalten_). 

leider habe ich keine ahnung, wie ich dieses der jTable oder dem tableModel mitgeben kann, so dass diese
auch später in der ansicht der jTable zu sehen sind.


```
new jTable (null, spalten_); --> Exception
```
oder

```
new jTable(tmdl, spalten_) --> gibt es leider nicht...
```

wie bekomme ich zu meiner jTable die dazugehörigen spaltenüberschriften?

danke für hilfe,


----------



## Wildcard (28. Feb 2005)

Setz die JTable in eine JScrollPane dann müsste es gehen


----------



## gondor (28. Feb 2005)

hm... mach ich:


```
JTable table = new JTable();
table.setModel(tmdl);            
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
table.setColumnSelectionAllowed(false);
table.setRowSelectionAllowed(true);
table.setColumnSelectionInterval(0, 0);
scrollPane = new JScrollPane(table);
appl_dataPane_jPanel_Center.removeAll();
appl_dataPane_jPanel_Center.add(scrollPane, BorderLayout.CENTER);
```

oder is da was falsch?

gondor(..)


----------



## abollm (28. Feb 2005)

Grundsätzliches Vorgehen:

Erstelle ein String-Array mit den Spaltenüberschriften, z.B.:

```
...
  public static final String[] COLHEADS = {
    "Spalte A", "Nächste Spalte", "Spalte 3"
  };
...
```

Spaltenmodell erzeugen und Überschriften spaltenweise zuordnen:

```
...
    //Spaltenmodell erzeugen
    DefaultTableColumnModel cm = new DefaultTableColumnModel();
    for (int i = 0; i < COLHEADS.length; ++i) {
      TableColumn col = new TableColumn(i, i == 2 ? 150 : 60);
      col.setHeaderValue(COLHEADS[i]);
      cm.addColumn(col);
    }
...
```

Hth


----------



## Wildcard (28. Feb 2005)

Fügst du die Header auch im Model ein?
[edit]2l8[/edit]


----------



## gondor (28. Feb 2005)

ne, mach ich nicht. genau, da liegt mein problem.

ich weiss nicht, wie man dem model sagt: "hey ich hab da ein header für dich..."

bzw. den header in das model 'integriert'. weisst du mehr?

lieben dank,

gondor(..)


----------



## abollm (28. Feb 2005)

Willst du ein Beispiel haben?


----------



## Wildcard (28. Feb 2005)

Hab ich mal eben aus der FAQ geklaut

```
// Die Namen der Columns 
      String[] titles = new String[]{ "A", "B", "C", "D" }; 
       
      // Das Model das wir verwenden werden. Hier setzten wir gleich die 
      // Titel, aber es ist später immer noch möglich weitere Columns oder 
      // Rows hinzuzufügen. 
      final DefaultTableModel model = new DefaultTableModel( titles, 0 );
```


----------



## gondor (28. Feb 2005)

mit 'abollm' vorschlag funktioniert es:


```
/*Tabellen-Model*/
C_TableModel tmdl = measurement_manager.getMeasurementTable(...);

DefaultTableColumnModel cm = new DefaultTableColumnModel();

            for (int i = 0; i < selected_sensor_names.length; ++i) {
                TableColumn col = new TableColumn(i, 60);
                col.setHeaderValue(selected_sensor_names[i]);
                cm.addColumn(col);
            }

JTable table = new JTable();
table.setModel(tmdl);
table.setColumnModel(cm);
...
scrollPane = new JScrollPane(table);
...
```

supi 

gondor(..)


----------



## gondor (28. Feb 2005)

@Wildcard

ah... ich habe das 'AbstractTableModel' implementiert. da gibt es den kontruktor nicht. aber bei dem 'DefaultTableModel' schon... komisch. stell ich mir doch die frage von welchem man nun erben soll...

MyTableModel extends AbstractTableModel {

oder 

MyTableModel extends DefaultTableModel {

auf jeden fall, danke für die lösung mit den spalten! 

gondor(..)


----------



## Wildcard (28. Feb 2005)

gondor hat gesagt.:
			
		

> ah... ich habe das 'AbstractTableModel' implementiert. da gibt es den kontruktor nicht. aber bei dem 'DefaultTableModel' schon... komisch. stell ich mir doch die frage von welchem man nun erben soll...


Das DefaultTableModel ist recht komfortabel. Wenn es für die Anforderungen genügt muss man auch nicht unbedingt
davon erben, sondern kann es einfach verwenden. Ich verwende meistens das DefaultTableModel


----------

