ColumnHeader über mehrere Zeilen

cHucKy51

Mitglied
Ist es möglich, columnHeader über mehrere Zeilen zu erstrecken? Ich möchte gerne 2 Headerzeilen haben und diese auch teilweise über mehrere Spalten erstrecken, sodass beispielsweise die Überschrift in der ersten Zeile den Titel für 2 Überschriften aus der zweiten Zeile darstellt.
Hat mir jemand einen Ansatz, wie ich das realisieren und dem TabellenModell übergeben kann?

Das ist ein Ausschnitt aus meinem TableModel:
Java:
    public int getColumnCount()
    {
        return columnNames.length;
    }
    
public String getColumnName(int column)
    {
        return (String) columnNames[column];
    }
 
Irgendwie will das erste Beispiel, das die von mir benötigte Funktionalität anzeigen soll, nicht funktionieren.

Hat vielleicht jemand ein kleineres, einfach zu verstehendes Beispiel parat?
 
Kann mir wirklich keiner helfen?

Es müsste nur ein ganz rudimentäres Beispiel mit 2 Spaltentitel und einem Titel für die 2 Spaltentitel sein. Ich hab mir das von MeinerEiner verlinkte Beispiel angeschaut, aber da blicke ich leider nicht durch. Muss der ganze Aufwand überhaupt sein? Ein TableModel habe ich ja schon.
 
Moin!
Kann mir wirklich keiner helfen?

Es müsste nur ein ganz rudimentäres Beispiel mit 2 Spaltentitel und einem Titel für die 2 Spaltentitel sein. Ich hab mir das von MeinerEiner verlinkte Beispiel angeschaut, aber da blicke ich leider nicht durch. Muss der ganze Aufwand überhaupt sein? Ein TableModel habe ich ja schon.

Das was du vorhast ist nunmal relativ komplex.. Da kannst du kaum ein einfaches Beispiel erwarten..
Aber wenn du sagst, wo genau deine Probleme sind, kann dir vielleicht weitergeholfen werden...

*grüssle*
MeinerEiner
 
Mein Problem ist, dass ich nicht mal einen Ansatz habe. Würde ich wenigstens den Code verstehen, wäre das ganze ja kein Problem...

Vielleicht kann mir ja jemand erklären, wie der Code grob funtkioniert.
 
Zuletzt bearbeitet:
Ich finde, man muss das auch garnet überall durchblicken.. Wenn man es nur nutzen will, brauch man sich doch nur die die Hauptklasse angucken

Als erstes den Datenvektor und die Spaltennamen erstellen. Spalten, die "zusammengefasst" erhalten keine Spaltennamen
Code:
dm.setDataVector(new Object[][]{
      {"a","b","c","d","e","f"},
      {"A","B","C","D","E","F"}},
    new Object[]{"1 st","","","","",""});

Im nächsten Schritt, der Tabelle den neuen Tabellenheader zuweisen.
Code:
    JTable table = new JTable( dm ) {
      protected JTableHeader createDefaultTableHeader() {
	return new GroupableTableHeader(columnModel);
      }
    };

die erste und zweite Spalte sollen zu einzigen Header erhalten.
Daher werden diese beiden zu einer ColumnGroup zusammengefügt.
Dasselbe mit den Spalten 3 und 4
Code:
ColumnGroup g_2nd = new ColumnGroup("2 nd");
    g_2nd.add(cm.getColumn(1));
    g_2nd.add(cm.getColumn(2));

Nun den Tabellenheader der Tabelle holen und die ColumnGroups hinzufügen.
Fertig..
Code:
    GroupableTableHeader header = (GroupableTableHeader)table.getTableHeader();
    header.addColumnGroup(g_2nd);
    header.addColumnGroup(g_3rd);


In dem anderen Beispiel konnte man dann noch ColumnGroups anderen Groups hinzufügen,
um somit mehrzeilige übergreifende Header zu erhalten..

Was da nun im einzelnen passiert, muss man doch garnet verstehen,
solang man es nicht weiter modifizieren will..
Ich finde das kann man recht leicht intuitiv nutzen ohne sich um den ganzen Code
kümmern zu müssen..

*grüssle*
MeinerEiner
 
Ja so habe ich mir das auch zuerst vorgestellt.
Leider benutze ich ein ganz anderes TableModel, ohne das DefaultTableModel. Mein TableModel wird mit einer HashMap für den Tabelleninhalt und mit einer ArrayList für die Überschriften gefüllt.
Setze ich nun einfach mein TableModel in den Code ein, funktioniert das Ganze nicht mehr.
 
Ich weiss zwar nicht, was ich gemacht habe, aber nun funktioniert es.
Es ist mir ein Räsel, aber egal. Hauptsache es geht :)
 
Zurück