2010-02-26 2 views
2

J'utilise le composant JTable GUI avec NetBeans.Création d'en-tête multiligne pour JTable

  • Je veux créer des en-têtes de plusieurs lignes

  • Je suis en mesure de cela, lorsque je crée renderer personnalisé pour les en-têtes de table

  • mais je ne veux pas, parce que je l'aime par défaut (je l'utilise partout ailleurs dans le programme).

  • Donc le problème est: Comment faire tête heigher?

Mon code:

String headers[] = new String[3]; 
    headers[0] = "Header1"; 
    headers[1] = "Header2"; 
    headers[2] = "<html><center>Long<br>Centered</br></center></html>"; 
    DefaultTableModel dtm = new DefaultTableModel(); 
    dtm.setColumnIdentifiers(headers); 
    dtm.setRowCount(5); 
    jTable1.setModel(dtm); 
    jTable1.getTableHeader().setPreferredSize(
       new Dimension(jTable1.getColumnModel().getTotalColumnWidth(),32)); 
+1

Peu importe, je mis à jour ma réponse :) à nouveau vérifier si elle a l'air comme prévu maintenant. –

Répondre

5

Effectuez les actions suivantes:

table.getTableHeader().setPreferredSize(
     new Dimension(table.getColumnModel().getTotalColumnWidth(), 32)); 

Cela va changer la taille de l'en-tête:

alt text http://img96.imageshack.us/img96/7544/so2343391.png

Pour centrer le texte, vous pouvez utiliser le <center> -tag:

headers[2] = "<html><center>Long Centered<br>Header"; 

alt text http://img710.imageshack.us/img710/705/so23436532.png

EDIT:

L'alignement est défini par votre LookAndFeel. WindowsTableHeaderUI par exemple appelle explicitement

setHorizontalAlignment(LEADING); 

La meilleure façon de résoudre ce problème est:

(JLabel)table.getTableHeader().getDefaultRenderer()) 
     .setHorizontalAlignment(SwingConstants.CENTER); 

Notez que ce changement est perdu lorsque vous changez LookAndFeel après.

+0

Super, merci c'est ce dont j'ai besoin. Cependant, j'ai maintenant du texte assez troublé dans l'en-tête ... Y at-il une chance que vous sachiez comment? – miso

+0

balise html

aidera pas ... SwingConstants.CENTER serait, mais je againg besoin de créer votre propre moteur de rendu en-têtes:/ – miso

+0

J'ai essayé 'center' et cela a fonctionné:' "

longue
tête
" '. Avez-vous essayé comme ça? –

1

Salut les gars J'ai essayé et il fonctionne:

DefaultTableCellRenderer r; 

    String headers[] = new String[3]; 
    headers[0] = "Category"; 
    headers[1] = "Item"; 
    headers[2] = "<html><center>Packaging<br>unit</center></br></html>"; 
    DefaultTableModel dtm = new DefaultTableModel(); 
    table.setModel(dtm); 
    r = (DefaultTableCellRenderer)table.getTableHeader().getDefaultRenderer(); 
    r.setHorizontalAlignment(JLabel.CENTER); 
    dtm.setColumnIdentifiers(headers); 

    table.getTableHeader().setPreferredSize(new Dimension(table.getColumnModel().getTotalColumnWidth(),32));