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

尝试添加该行:

table.doLayout();

在方法结束时。

于 2009-03-16T00:25:02.167 回答
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 回答