2009-03-14 8 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))); 
    } 
} 

JTableの幅をテーブルの全幅のパーセンテージに基づいて変更したいと考えています。上記のコードは動作するはずですが、 "setPreferredTableColumnWidths(table、new double [] .01、.4、.2、.2、.2));"を使用して呼び出すときには、Jtableの列幅のサイズ変更が機能しない

何が問題なのですか?

答えて

0

次の行を追加してください:

table.doLayout();

このメソッドの最後に。

1

コードは正常に動作しますが、テーブルの幅によってはテーブルの幅が異なる場合もあります。 Panelのコンストラクタ(またはテーブルを含むもの)にはまだ幅がありません。

私はあなたのメソッドへの呼び出しをpaint()メソッドに入れました。しかし、追跡して一度だけ呼び出すか、列のサイズを何度も変更するようにしてください。

@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; 
    } 
}