2009-03-14 7 views
1
//can set column widths using percentages 
private void setPreferredTableColumnWidths(JTable table, double[] percentages) 
{ 
    Dimension tableDim = table.getSize(); 

    double total = 0; 
    for(int i = 0; i < table.getColumnModel().getColumnCount(); i++) 
     total += percentages[i]; 

    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
    for(int i = 0; i < table.getColumnModel().getColumnCount(); i++) 
    { 
     TableColumn column = table.getColumnModel().getColumn(i); 
     column.setPreferredWidth((int) (tableDim.width * (percentages[i]/total))); 
    } 
} 

Je veux être en mesure de modifier les largeurs d'un JTable basé sur un pourcentage de la largeur totale de la table. Le code ci-dessus semble fonctionner, mais je ne reçois que des colonnes de largeur égale lorsque je l'appelle en utilisant "setPreferredTableColumnWidths (table, new double [] {.01, .4, .2, .2, .2});"Redimensionnement des largeurs de colonnes Jtable ne fonctionne pas

Quel pourrait être le problème?

Répondre

0

Essayez d'ajouter la ligne:

table.doLayout();

À la fin de la méthode.

1

Votre code fonctionne bien, mais selon l'endroit où vous l'appelez, la table peut avoir ou non une largeur. Dans le constructeur d'un Panel (ou tout ce qui contient la table) il n'y a pas encore de largeur.

Je mets l'appel à votre méthode dans la méthode paint(). Mais assurez-vous de garder une trace et appelez-le une seule fois ou il va redimensionner les colonnes encore et encore.

@Override 
public void paint(Graphics g) { 
    super.paint(g); 

    if(! this.initialSizeSet){ 
     this.setPreferredTableColumnWidths(this.table, new double[] {0.1, 0.1, 0.5, 0.3}); 
     this.initialSizeSet = true; 
    } 
}