Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

JTable ohne Kopf





Frage

Hallo, ich hab ein kleines Problem, ich benutze in einen Programm die Klasse JTable. Diese besitzt einen Konstruktor, dem 2 Vektoren übergeben werden müssen, einer für die Spaltennamen und einer mit den Daten. Wenn ich das richtig verstanden habe, benutzt Java den Spaltenvektor zu Namensgebung der Spalte und als KopfZeile. Allerdings wird diese Kopfzeile nicht mit angezeigt. Ich hab leider auch nichts gefunden womit ich diese sichtbar setzen könnte. Hat jemand ne Idee? LG Andre

Antwort 1 von semi

Codeausschnitt? Anzahl-Überschriften = Anzahl-Spalten?

Antwort 2 von Bluescorpion

Was möchtest du da jetzt für eine Code-Ausschnitt? Ist ja nicht viel dazu!

Aber na gut, ich versuche es dann mal :D


public class DisplayTable extends JInternalFrame
{
    JTable tabelle = null;
    
    public DisplayTable( Vector data , Vector spaltennamen) 
    {
        setTitle("Tabelle");
        setIconifiable(true);
        setMaximizable(true);
        setClosable(true);
        setSize(600,400);
        setBackground(Color.lightGray);
        setTabelle( new JTable(data, spaltennamen) );
        getContentPane().add(getTabelle());

        setFocusable(true);
        addFocusListener( ... );
    }


Das wars auch schon. Die Anzahl der Überschriften und Spalten sind variable, die sollte er aus dem Vektor erkennen können! Mehr ist da ja erstmal nicht zu machen!

LG Andre

Antwort 3 von semi

Ich will zunächst mal gar nichts sehen.
Wenn du Code-Ausschnitt zeigst, dann kann
man zumindest die "groben" Fehler ausschliessen
bevor man hier anfängt zu rätseln.

Stecke die Tabelle in ein JScrollPane, dann
hast du deinen Header.

Und ohne den Code hätte ich es nicht gesehen.

Antwort 4 von Bluescorpion

Dankeschön! Werde es mal versuchen.

Das war doch nicht böse gemeint mit dem Codeausschnitt, konnte nur nicht verstehen wie das in diesem Fall helfen könnte, da es ja "nur" ein Konstruktoraufruf ist. :)


Warum muß man das eigentlich in ein ScrollPane stecken? Sollte es in der Theorie nicht auch ohne gehen?

Danke André

Antwort 5 von semi

TableHeader wird nicht direkt in JTable
angezeigt sondern innerhalb von JScrollPane.

Der Grund ist folgender.
Wenn eine Tabelle nicht in den sichtbaren Bereich
passt, dann wird gescrollt. Wenn der Header in der
Tabelle drin wäre, dann würde er mitscrollen.
Net so lustig.:)

So sieht's i.d.R. aus

-----------------------
| Table               |
|                     |
|   ................  |
|   .$$$$ $$$$ $$$$.  |
|   .             ^.  |
|   .             #.  |
|   .    View     #.  |
|   .             #.  |
|   .             #.  |
|   .             #.  |
|   .             v.  |
|   .<############>.  |
|   ................  |
|                     |
-----------------------


Du kannst den Header auch irgendwo anders im
Fenster plazieren oder von mir aus in einem
anderen Fenster.
z.B.
panel.add(table.getHeader(), BorderLayout.SOUTH);

dann ist der Header unter der Tabelle :)

Schau Dir dazu den Code von JTable.configureEnclosingScrollPane() an.

Gruß,
Michael

Antwort 6 von Bluescorpion

Achso,

jetzt macht das ganze Sinn. Ich war bisher der Meinung das das zusammengehört.

Dankeschön!

LG André