# JTable - Header colspan



## klaus0610 (8. Okt 2004)

Hallo Leute,

ich habe ein Problem mit dem ich mich seit mehreren Tagen herumschlage.

Wie ist der einfachste Weg dem Header einer JTable ein colspan zuzuweisen?

Ich möchte also in einer Tabelle die aus 8 Spalten besteht, nur 4 TableHeader haben, der erste sollte über 5 Spalten gehen und alle weiteren über eine Spalte.

oder

Kann man mehrere Images in eine Zelle einer JTable einfügen oder es zumindest so faken...?

Vielen Dank wenn Ihr mir weiter helfen könnt...


----------



## Beni (8. Okt 2004)

Echtes Zusammenfügen ist zwar möglich, allerdings musst Du dann in irgendwelchen UI-Klassen rumwühlen, es wird nicht auf allen Betriebssystemen funktionieren, beim nächsten update der Java-API geht nicht mehr, es kann eine Höllenarbeit sein, und ich würde dir dringend davon abraten.

Aber der Fake könnte gut klappen. Du kannst den Header selbst zeichnen (einfach ein TableCellRenderer implementieren), und dann jeweils nur Teile des Gesammtbildes darstellen. Aber wie das genau geht, guckst du am besten in der FAQ nach.


----------



## Sky (8. Okt 2004)

Es soll also so sein, dass Du eine Überschrift hast und darunter 4 Bilder nebeneinander dargestellt werden sollen??

Das geht ohne Probleme. Du mußt ein TableModel entwickeln, welches für diese Spalte die entsprechenden Bilder bzw. Pfade der Bilder speichern kann und dein Renderer muss derart implementiert werden, dass er alle Bilder, welche für eine Zelle abgelegt werden nebeneinander malt.

Grüsse, Sky


----------



## klaus0610 (8. Okt 2004)

Ich habe bereits ein Model erstellt, dass jedoch nur ein ImagIcon pro Zelle einfügen kann.

Kannst Du mir einen Tip geben wie ich vorgehen sollte um mehrere Bilder in eine Zelle zu bekommen. Meine CellRenderer verkraftet das nicht, da er immer nur ein Objekt erwartet...

Danke....


----------



## Sky (8. Okt 2004)

Du kannst mehrere Bilder in einen Vector oder in ein Array füllen.


```
...
public void setValueAt( Object o; int row, int col ) {
   ...
}
...

// Vector enthält die Daten
...setValueAt( myVector, 0, 0 );
...
```

und im CellRenderer mußt Du einen Cast machen:


```
public java.awt.Component getTableCellRendererComponent(
      JTable table,
      Object value,
      boolean isSelected,
      boolean hasFocus,
      int row,
      int column) {

Vector myVectorValue = (Vector)value;
...
}
```

Und dann 'einfach' nur noch alles, was in dem Vector hängt malen


----------



## Sky (8. Okt 2004)

Kann mal einer einen von meinen beiden Posts löschen??? 
DANKE

_habsch - Roar_


----------



## klaus0610 (8. Okt 2004)

Hallo Sky,

vielen Dank, dass Du Dir ein wenig Zeit nimmst. Die Sache wird so langsam auch immer klarer. Eine Frage habe ich jedoch noch.

Mein CellRenderer Sieht folgendermaßen aus:

public class IconCellRenderer extends DefaultTableCellRenderer{


```
protected void setValue(Object value){

        if(value instanceof Icon)
            setIcon((Icon)value);
        else
            super.setValue(value);
    }
}
```

OK, anstelle des Object value könnte ich dann auch einen Vector mir Icons übergeben, aber wie zeichne ich dann mehrere Icons?

Wäre eine for-Schleife die immer wieder setIcon(...) aufruft möglich?

Irgendwelche Ideen?


----------



## Sky (11. Okt 2004)

Also, setIcon würde ja jedesmal das vorhergehende Icon überschreiben.

Du könntest deine Icons auf einen Container malen und dieses bei getCellRendererComponent zurückgeben.


----------

