2016-07-05 24 views
0

私はJTableを拡張するカスタムテーブルクラスを持っています。チェックボックスに基づいて列を表示/非表示にしたい。私はアクションの列の最大、最小、および優先幅を変更するチェックボックスにactionlistenerを持っています。JTable:外部入力に基づいて列を変更する

チェックボックスが選択されていない場合は、最小/最大/優先幅を0に設定します。これを選択すると、最小/最大/優先幅を通常のサイズに設定します。

私の問題は、チェックボックスをオンにしてもテーブルが変わらないことです。私は列を見ません。ただし、アプリケーションまたはテーブルの列のサイズを変更すると、テーブルが更新され、新しい列が正しく表示されます。

私は "table.repaint()"を呼び出そうとしましたが、何もしませんでした。私の理想的なアプローチは、更新を引き起こすアプリケーション/列のサイズ変更中に何が呼び出されているか把握し、それをリスナーから呼び出すことです。

+0

投稿すると、あなたは何をしたのか理解できます – c0der

+0

*表示*を変更するのではなく、*モデル*で変更を行うことを検討してください - それぞれのタイプに1つずつ2つのTableModelを作成し、それに応じてJTableモデル – copeg

+0

'アプリケーションやテーブルの列のサイズを変更すると、テーブルが更新され、新しい列が正しく表示されるようになりました.'変更が行われたことをLayoutManagerに知らせる必要があります。 'revalidate'を呼び出そうとしますが、上記の私のコメントの中の代替案を考慮に入れてください – copeg

答えて

3

私は、動作中の列の最大、最小、および優先幅を変更するチェックボックスにactionlistenerを持っています。

列サイズで再生しないでください。列はテーブルの一部であり、カーソルが最小化された列で消えるため、ユーザーは列ごとにタブを移動するので、ユーザーを混乱させます。

代わりに、テーブルのビューから列を削除する必要があります。したがって、テーブルのTableColumnModelからTableColumnを削除する必要があります。

Table Column Managerをご覧ください。これにより、必要に応じて列を非表示/表示することができます。

関連する問題