2
table.getTableHeader().setResizingAllowed(false);
column = table.getColumn(columns[0]);
column.setWidth(25);
column = table.getColumn(columns[1]);
column.setWidth(225);
column = table.getColumn(columns[2]);
column.setWidth(50);
table.doLayout()

这拒绝将列设置为其指定的宽度。有什么理由吗?

4

3 回答 3

3

JTable当is not的调整大小模式时,Swing 会忽略您设置的列宽AUTO_RESIZE_OFF。而不是使用setWidth,使用setPreferredWidth。然后,表格将在列布局时使用此值。如果您设置最小、最大和首选宽度,它应该适用于所有场合,但您的用户不能再自己更改列宽。所以请谨慎使用。

布局过程在API-Docs中有详细描述

于 2009-06-25T20:35:38.457 回答
0

为了让它适用于我的桌子,我setBounds在其中覆盖并设置了首选宽度:

@Override
public void setBounds(int x, int y, int width, int height)
{
    super.setBounds(x, y, width, height);

    setPreferredColumnWidths(new double[] { 0.4, 0.4, 0.1, 0.1 });
}


我从这篇文章中得到了 setPreferredColumnWidths 的实现。

protected void setPreferredColumnWidths(double[] percentages)
{
    Dimension tableDim = getPreferredSize();

    double total = 0;

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

    for (int i = 0; i < getColumnModel().getColumnCount(); i++)
    {
        TableColumn column = getColumnModel().getColumn(i);
        column.setPreferredWidth(
             (int)(tableDim.width * (percentages[i] / total)));
    }
}
于 2009-07-16T01:16:41.457 回答
0

我无法让它工作很长时间,然后我终于发现我需要设置autoCreateColumnsFromModel为 false。

编辑:忽略这一点,这是我想要 tableDataChanged 时触发 tableStructureChanged 的​​结果(请参阅下面的讨论,感谢 kleopatra 识别错误)

于 2012-02-06T03:48:00.037 回答