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});」を使用して呼び出すと、同じ幅の列しか得られません。

何が問題なのですか?

4

2 に答える 2

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;
    }
}
于 2009-08-26T14:43:01.247 に答える
1

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

table.doLayout();

メソッドの最後。

于 2009-03-16T00:25:02.167 に答える