2010-01-22 3 views

Répondre

4

Vous devez intégrer votre JTable dans un JScrollPane et les têtes de colonne seront affichés automatiquement:

JScrollPane sp = new JScrollPane(new JTable()); 
+0

Merci Adamski. Il y a cependant un petit problème: j'utilise le GridBagLayout. lorsque j'ajoute le JScrollPane avec la JTable incorporée au conteneur avec cette disposition, la JTable est réduite à une taille très petite. Je n'arrive toujours pas à comprendre pourquoi ... – Anto

+0

Avez-vous ajouté le scrollpane avec les valeurs appropriées fill, weightx et weighty? – willcodejavaforfood

+0

les valeurs dont vous avez besoin sont fill = GridBagConstraints.BOTH et les valeurs weigthx et weighty doivent être relativement grandes par rapport à la somme de ces valeurs dans leur rangée/colonne respective. Idéalement weigthx et lourd pour le jscrollpane sera 1 (en base 1) et 0 dans le reste des composants dans la même ligne/colonne – Telcontar

1

Vous devez implémenter la méthode getColumnName dans le TableModel Interface pour renvoyer les noms de colonnes que vous voulez.

De la Javadoc de TableModel:

Chaîne getColumnName (int columnIndex)
Renvoie le nom de la colonne à columnIndex. Ceci est utilisé pour initialiser le nom de l'en-tête de colonne de la table.

EDIT:
La classe abstraite AbstractTableModel offre la mise en œuvre pour la plupart des méthodes dans l'interface TableModel et fournit également une implémentation par défaut pour la méthode getColumnName dans l'interface TableModel (mais qui pourrait ne correspond pas à votre objectif car il retourne les noms de colonnes comme A, B ..).

Créer votre propre TableModel par le sous-classement AbstractTableModel et fournissent implemenation pour les méthodes abstraites et outrepasser GetColumnName. Par exemple, vous pouvez essayer quelque chose comme:

class MyTableModel extends AbstractTableModel { 
    private List<String> rowData; // say 
    private List<String> columnNames; 

    MyTableModel(List<String> data,List<String> names) { 
     rowData = data; 
     columnNames = names; 
    } 

    // provide implementation of abstract methods 
    public int getRowCount() {...} 
    public int getColumnCount() {...} 
    public Object getValueAt(int row, int column) {...} 

    @Override 
    public String getColumnName(int pCol) { 
     return columnNames.get(pCol); 
    } 
    ... 
} 

// create your table as below; 
List<String> data = new ArrayList<String>(); 
data.add("Test"); 
data.add("Try"); 

List<String> colNames = new ArrayList<String>(); 
colNames.add("Name"); 

MyTableModel model = new MyTableModel(data,colNames); 
JTable myTable = new JTable(model); 

1

Je pense que ce que vous cherchez vraiment la classe est la DefaultTableModel. Il suffit de lire la documentation et vous serez sur votre propre chemin.

Questions connexes