7

そのJTableため、私は、独自のカスタムデータモデルに関連付けられているを使用しています。それだけはすべて機能しますが、私が抱えている問題は、テーブルに変更を加えるたびに(tableDataChanged、tableStructureChangedなどを実行する)、すべての列幅がデフォルト値にリセットされることです。TableColumnModelこれはデフォルトで割り当てられたものと関係があることを調査から理解しています。このリセット以外では、の機能には満足していDefaultTableColumnModelますが、ユーザーが列のサイズを変更する必要がある場合(列ヘッダーの端をドラッグして)、列の幅を保持したいと思います。

私はsetPreferredWidth()TableColumnsを認識しており、それを成功させることができました。私の質問は、この好ましい幅を保存して設定するためにどのようなイベントをリッスンする必要があるかということだと思います。テーブルヘッダーにを追加しようとしましたPropertyChangeListenerが、サイズを変更しようとすると、StackOverflowが発生します(再帰的に実行されていると想定しています)。列幅のデータモデルにデータメンバーを追加してそこに保存することはまったく問題ありませんが、これらの幅がfireTableStructureChanged()、などによって上書きされないようにいつ/どのように設定するかがわかりません。 。イベント。考え?

4

2 に答える 2

2

どうですか

table.setAutoCreateColumnsFromModel(false);

私もこの問題を抱えていましたが、これでうまくいきました!

于 2014-07-11T12:02:54.457 に答える
1

このようなことを試してください。

import javax.swing.JTable;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;

public class ColumnResizer {

    public static void setColumnPreferredWidth(JTable table, int column,
            int preferredWidth) {
        TableColumnModel columnModel = table.getColumnModel();
        TableColumn tableColumn = columnModel.getColumn(column);
        tableColumn.setPreferredWidth(preferredWidth);
    }

}
于 2012-04-17T19:41:22.917 に答える