2017-06-30 2 views
0

J'ai créé un jTable avec 0 lignes et 0 colonnes puisque le contenu, y compris les noms d'en-tête, va être ajouté dynamiquement en fonction des boutons. J'utilise un TableCellrenderer pour redimensionner les colonnes. Dans mon code, toutes les colonnes s'arrangent uniquement en fonction des valeurs d'en-tête et, de plus, si la somme de toutes les largeurs de colonnes est inférieure à celle de la largeur jTable, elle doit couvrir toute la table. Je ne sais pas comment faire cela et quel est le problème dans mon code. Merci à l'avanceComment redimensionner jTable pour s'adapter à leur contenu, y compris son en-tête?

public void tableresize(JTable table) 
{ 
    for(int i=0;i<table.getColumnCount();i++) 
    { 
    DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel(); 
    TableColumn col = colModel.getColumn(i); 
    int width = 0; 
    TableCellRenderer renderer = col.getHeaderRenderer(); 
    if (renderer == null) 
    { 
     renderer = table.getTableHeader().getDefaultRenderer(); 
    } 
    Component comp = renderer.getTableCellRendererComponent(table, col.getHeaderValue(), false, false, 0, i); 
    if(table.getRowCount()>0) 
    { 
     for(int r=0;r<table.getRowCount();r++) 
     { 
     renderer=table.getCellRenderer(r,i); 
     Component comp1=renderer.getTableCellRendererComponent(table,table.getValueAt(r, i),false,false, r, i);  
     if(comp.getPreferredSize().width<comp1.getPreferredSize().width) 
     { 
      width=comp1.getPreferredSize().width; 
     } 
     else 
     { 
      width=comp.getPreferredSize().width; 
     } 
     } 
    } 
    else 
    { 
     width=comp.getPreferredSize().width; 
    } 
    col.setPreferredWidth(width+4);  
    }  
} 

Répondre

0

Dans mon code toutes les colonnes sont agençant uniquement basées sur des valeurs en-tête

Eh bien, je vous devine que invoquez votre code lorsque le nombre de lignes est 0.

Extrayez le Table Column Adjuster pour qu'une classe calcule les largeurs de colonne. Le code peut être appelé dynamiquement lorsque vous ajoutez/supprimez des lignes de données ou modifiez les données dans une cellule.

+0

Merci pour votre aide. Ça marche. Mais si la somme de toutes mes colonnes est inférieure à la largeur totale, toutes les colonnes sont disposées d'un côté (les colonnes ne couvrent pas entièrement la table) – Previn

+0

@previn, je ne l'ai jamais essayé, mais vous pourriez peut-être combiner au-dessus de la classe avec la suggestion dans cette publication: https://stackoverflow.com/questions/15234691/enabling-auto-resize-of-jtable-only-if-it-fit-viewport/15240806#15240806 – camickr

+0

J'ai eu la solution avec au-dessus de la classe en utilisant des conditions supplémentaires. Si la largeur totale est trop faible, j'autorise AUTO_RESIZE_ALL_COLUMNS .. Fonctionne plutôt bien. Merci – Previn