web-dev-qa-db-fra.com

JTable ne montrera pas les en-têtes de colonnes

J'ai le code suivant pour instancier une JTable: la table fournit le bon nombre de lignes et de colonnes, mais il n'y a aucune trace des titres en haut des colonnes.

public Panel1()
{
    int  nmbrRows;

    setLayout(null);
    setBackground(Color.Magenta);
    Vector colHdrs;

    //create column headers

    colHdrs = new Vector(10);
    colHdrs.addElement(new String("Ticker"));

    // more statements like the above to establish all col. titles       

    nmbrRows = 25;
    DefaultTableModel tblModel = new DefaultTableModel(nmbrRows, colHdrs.size());
    tblModel.setColumnIdentifiers(colHdrs);

    scrTbl = new JTable(tblModel);
    scrTbl.setBounds(25, 50, 950, 600);
    scrTbl.setBackground(Color.gray);
    scrTbl.setRowHeight(23);    
    add(scrTbl);

//rest of constructor
...

}

En comparant cela à un autre code permettant de créer des tables, je ne vois aucune étape manquante, mais quelque chose doit être absent.

76
John R Doner

Placez votre JTable dans un JScrollPane. Essaye ça:

add(new JScrollPane(scrTbl));
166
Erkan Haspulat

La principale différence entre cette réponse et la réponse acceptée est l'utilisation de setViewportView() au lieu de add() .

Comment mettre JTable dans JScrollPane en utilisant Eclipse IDE:

  1. Créez le conteneur JScrollPane via l'onglet Conception.
  2. Étirer JScrollPane à la taille désirée (s'applique à la mise en page absolue).
  3. Glissez-déposez le composant JTable au-dessus de JScrollPane (zone d'affichage).

Dans Structure> Composants, table devrait être un enfant de scrollPaneenter image description here

Le code généré ressemblerait à ceci:

JScrollPane scrollPane = new JScrollPane();
...

JTable table = new JTable();
scrollPane.setViewportView(table);
23
silver

Comme indiqué dans les réponses précédentes, la méthode "normale" consiste à l'ajouter à un JScrollPane, mais parfois vous ne voulez pas qu'il défile (ne me demandez pas quand :)). Ensuite, vous pouvez ajouter le TableHeader vous-même. Comme ça:

JPanel tablePanel = new JPanel(new BorderLayout());
JTable table = new JTable();
tablePanel.add(table, BorderLayout.CENTER);
tablePanel.add(table.getTableHeader(), BorderLayout.NORTH);
8
Tobias Sjöbeck
    public table2() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 485, 218);
    setTitle("jtable");
    getContentPane().setLayout(null);

    String data[][] = { { "Row1/1", "Row1/2", "Row1/3" },
            { "Row2/1", "Row2/2", "Row2/3" },
            { "Row3/1", "Row3/2", "Row3/3" },
            { "Row4/1", "Row4/2", "Row4/3" }, };

    String header[] = { "Column 1", "Column 2", "Column 3" };

    // Table
    JTable table = new JTable(data,header);


    // ScrollPane
    JScrollPane scrollPane = new JScrollPane(table);
    scrollPane.setBounds(36, 37, 407, 79);
    getContentPane().add(scrollPane);

   }

}

essaye ça!!

1
chaithra_a