JTable Titel wird nicht angezeigt

Jhue89

Bekanntes Mitglied
Hallo Zusammen,

kann mir einer sagen warum der Title vom JTable nicht angezigt wird.



Java:
getContentPane().add(pnlCenter,BorderLayout.CENTER);
        pnlCenter.setPreferredSize(new Dimension(400, 800));
        pnlCenter.setBorder(new TitledBorder(new LineBorder(new Color(0, 0, 0), 2), "Schachteleditor", TitledBorder.LEADING, TitledBorder.BELOW_TOP, null, new Color(0, 0, 0)));
        pnlCenter.setLayout(new BorderLayout(0, 0));
        
        JScrollPane sclpCenter = new JScrollPane();
        sclpCenter.setLocation(new Point(20, 5));
        sclpCenter.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        sclpCenter.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        pnlCenter.add(sclpCenter);
        
        sclpCenter.setViewportView(pnlSchachtel0);
        GroupLayout gl_pnlSchachtel0 = new GroupLayout(pnlSchachtel0);
        gl_pnlSchachtel0.setHorizontalGroup(
            gl_pnlSchachtel0.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_pnlSchachtel0.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(panel_1, GroupLayout.DEFAULT_SIZE, 603, Short.MAX_VALUE)
                    .addContainerGap())
        );
        panel_1.setBorder(new TitledBorder(null, "Schachtel 0", TitledBorder.LEADING, TitledBorder.TOP, null, null));
        gl_pnlSchachtel0.setVerticalGroup(
            gl_pnlSchachtel0.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_pnlSchachtel0.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(panel_1, GroupLayout.PREFERRED_SIZE, 195, GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(571, Short.MAX_VALUE))
        );
        table.setModel(new DefaultTableModel(
            new Object[][] {
                {null, null},
                {null, null},
            },
            new String[] {
                "Spalte1", "Spalte2"
            }
        ));
        table.setPreferredSize(new Dimension(200, 160));
        GroupLayout gl_panel_1 = new GroupLayout(panel_1);
        gl_panel_1.setHorizontalGroup(
            gl_panel_1.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_panel_1.createSequentialGroup()
                    .addComponent(table, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED, 214, Short.MAX_VALUE)
                    .addComponent(chckbxNewCheckBox, GroupLayout.PREFERRED_SIZE, 148, GroupLayout.PREFERRED_SIZE)
                    .addGap(41))
        );
        gl_panel_1.setVerticalGroup(
            gl_panel_1.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_panel_1.createSequentialGroup()
                    .addGroup(gl_panel_1.createParallelGroup(Alignment.LEADING)
                        .addComponent(table, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                        .addGroup(gl_panel_1.createSequentialGroup()
                            .addGap(7)
                            .addComponent(chckbxNewCheckBox)))
                    .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        panel_1.setLayout(gl_panel_1);
        pnlSchachtel0.setLayout(gl_pnlSchachtel0);
 
Also viel Code, der zu einem großen Teil nichts mit der Problematik zu tun haben dürfte und wichtiger Code fehlt...

Du kannst auf die Header von table zugreifen über table.getColumnHeader() und da gibt es die Methode setVisible(boolean).
Damit könntest Du schauen, ob Du damit die Header sichtbar machen kannst. (Benötigt ggf. noch ein revalidate auf dem Panel auf dem table ist.)

Wieso es nicht sichtbar ist, kann man so jetzt nicht sagen, da der Code nicht vorliegt. Das JTable dürfte entsprechend erzeugt worden sein.
 
Also viel Code, der zu einem großen Teil nichts mit der Problematik zu tun haben dürfte und wichtiger Code fehlt...

Du kannst auf die Header von table zugreifen über table.getColumnHeader() und da gibt es die Methode setVisible(boolean).
Damit könntest Du schauen, ob Du damit die Header sichtbar machen kannst. (Benötigt ggf. noch ein revalidate auf dem Panel auf dem table ist.)

Wieso es nicht sichtbar ist, kann man so jetzt nicht sagen, da der Code nicht vorliegt. Das JTable dürfte entsprechend erzeugt worden sein.
Ich habe das reinkopiert was den Teil betrifft. Ich habe die Geschichte mit dem Windowsbuilder gemacht deswegen sind da bestimmt einige Sachen zuviel drin oder nicht notwendig.

De Methode gibt es bei mir anscheinend nicht. Bei mir gibt es leider nur
Java:
 tabel.getTableHeader().setVisible(true);

ich hab noch mal ein Screenshot von dem Builder gemacht damit ihr euch vorstellen könnt was ich genau vorhabe.table.PNG


Das Panel Schachtel1 möchte ich später insgesammt noch 9x erzeugen. Daher der Scrollpane.
 
Hat geklappt, aber warum geht das nur mit dem JScrollpane? Mal für mich zum verständnis.
Weil das so festgelegt ist, aus der Javadoc zu JTable (wobei das nur falsch ist)

JTables are typically placed inside of a JScrollPane. By default, a JTable will adjust its width such that a horizontal scrollbar is unnecessary. To allow for a horizontal scrollbar, invoke setAutoResizeMode(int) with AUTO_RESIZE_OFF. Note that if you wish to use a JTable in a standalone view (outside of a JScrollPane) and want the header displayed, you can get it using getTableHeader() and display it separately.
Das hat man einfach so festgelegt als "Standard-Verhalten". Da Tabellen oft scrollbar sein sollen, der Header aber nicht mitscrollen soll, hat man das Verhalten so definiert, weil man damit einen Großteil der Anwendungen erschlägt. Ansonsten müsste man ggf. den Header unsichtbar machen wenn man es in einer ScrollPane verwendet etc.

Wie oben geschrieben - man kann den Header auch sich geben lassen und separat anzeigen wenn man will.
 

Zurück
Oben