# JTable: Spalten & Zellen fixieren wie in Excel



## Guest (5. Mai 2008)

Guten Morgen,

da ich in meiner Tabelle sehr viele Spalten und mit der Zeit auch sehr viele Datensätze habe, 
möchte ich dem User die Möglichkeit geben spezielle Zellen zu "fixieren" und so das Scrollverhalten 
meiner Tabelle zu ändern.

Beispiel:

Ich setze wie in Excel eine "Hilfslinie" hinter die erste Spalte in meiner Tabelle. Scrolle ich nun nach rechts bleibt die
erste Spalte fixiert und nur die anderen Spalten bewegen sich.

Hat jemand eine Idee wie man dies realisieren kann bzw. ob das mit java überhaupt möglich ist?!

Danke schonmal im vorraus!


----------



## L-ectron-X (5. Mai 2008)

Es gibt hier im Threadverlauf eine Lösung, in einem recht ähnlichen Fall:
http://forum.byte-welt.net/showthread.php?p=4327
Sie müsste ggf. noch angepasst werden.


----------



## André Uhres (6. Mai 2008)

Anonymous hat gesagt.:
			
		

> Scrolle ich nun nach rechts bleibt die erste Spalte fixiert


Man kann zwei Tabellen machen mit zwei TableModels, die sich die Daten teilen, wie hier: 
http://access1.sun.com/FAQSets/swingfaq.html#8

oder zwei Tabellen, die sich ein TableModel teilen, wie hier: 
http://www.java-forum.org/de/viewtopic.php?p=370610#370610


----------



## GianaSisters (2. Aug 2011)

Leider funktionieren die weiterführenden Links auf den Seiten dort nicht. Kann mir Jemand weiterhelfen wie ich die ersten 2 Spalten in meinem Komplexen JTable 'einfrieren' kann, so dass sie beim Scrollen nach rechts sichtbar bleiben ? Wäre klasse wenn sich damit Jemand auskennt


----------



## Dow Jones (2. Aug 2011)

Ich habe das letztens selber noch verwendet; ist eigentlich nicht schwierig. Den Quellcode poste ich jetzt aber mal nicht, da dort noch viele weitere Sachen drinstehen und ich zu faul bin den irrelevanten Kram rauszuwerfen...
Das Prinzip ist folgendes (soweit ich mich erinnere):

1) Ein ScrollPane erzeugen. dort gibt es - wie man in der Doku sehen kann - neun verschiedene Bereiche in denen man Komponenten unterbringen kann

2) 2 JTables erzeugen. Den Header der ersten Tabelle (die wird nur vertikal gescrollt) musst du in dem Feld LinksOben beim ScrollPane unterbringen, den Body im Feld Links. Bei der Zweiten Tabelle (die wird vertikal+horizontal gescrollt) kommt der Header ins obere Feld und der Body ins mittlere Feld. (Anmerkung: Tabelle 2 entspricht damit dem Normalfall, wenn man eine JTable in ein ScrollPane einbettet)

3) Dein TableModel übergibst du nun der zweiten Tabelle (diejenige welche in alle Richtungen gescrollt werden kann (ist aber eigentlich egal welche von beiden JTables das Model bekommt)). Da JTables aber nicht nur über ein TableModel sondern auch ein TableColumnModel verfügen (wird in der Regel automatisch erstellt) kann man jetzt leicht hergehen und sich von Tabelle 2 beliebige Spalten aus dem TableColumnModel mopsen um sie anschließend in das TableColumnModel von Tabelle 1 einzufügen. 

Die in Punkt 3 behandelten Spalten erscheinen dann nicht mehr in Tabelle 2 (da sie ja in dessen TableColumnModel fehlen) sondern in Tabelle 1 (in dessen TableColumnModel sie sich nun befinden). Und das ScrollPane sorgt dafür, dass Tabelle 1 nicht horizontal sondern nur vertikal scrollbar ist. Das ist doch der gewünschte Effekt, oder?


PS: Quellcode kann ich natürlich posten, aber halt nur wenn nötig


----------

