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が notの場合、Swing はユーザーが設定した列幅を無視しますAUTO_RESIZE_OFF。を使用する代わりに、 をsetWidth使用してsetPreferredWidthください。テーブルは、列が配置されるときにこの値を使用します。最小幅、最大幅、優先幅を設定すると、すべての状況で機能するはずですが、ユーザーは列幅を自分で変更できなくなります。したがって、これは注意して使用してください。

レイアウト プロセスは、 API-Docsで詳細に説明されています。

于 2009-06-25T20:35:38.457 に答える
0

私はこれを何年もの間機能させることができませんでした、そして私はついに私がautoCreateColumnsFromModelfalseに設定する必要があることに気づきました。

編集:これを無視してください。tableDataChangedが必要なときにtableStructureChangedを起動した結果でした(以下の説明を参照してください。間違いを特定してくれたkleopatraに感謝します)

于 2012-02-06T03:48:00.037 に答える
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 に答える