2011-11-02 6 views
2

JTableを使用して情報を表示しています。列をドラッグして並べ替えると、情報がレンダリングされた後、情報がセッション内で同じ方法で表示されます。しかし、列名を反復して列名をチェックして変更をキャプチャしようとすると、シーケンスは古いものと同じになります。最新のビューがAPIから利用できないのはなぜですか?Jtableで列をドラッグした後に列インデックスが変更されない

+5

ビューとモデルは完全に異なっています。列の順序を変更してもモデルに影響はありません。 –

答えて

7

Hovercraft Full Eelsのコメントでは、ビュー内の列インデックスはモデルの列インデックスとは無関係に変更されます。 JTableのjavadocはそれについて言うためにこれがあります。デフォルトでは

をビューの列がモデル内の列に異なる順序で表示されるように、列はJTableに再配置することができます。これはモデルの実装にまったく影響しません。列の順序が変更されると、JTableは列の新しい順序を内部的に保持し、モデルを照会する前に列インデックスを変換します。

JTableは、あなたが一方から他方への列番号を変換するために使用できる方法convertColumnIndexToModel()convertColumnIndexToView()を提供しています。これらを使用して、列が再配置されているかどうか(どのように)整理されているかを把握することができます。

列の変更が発生したときに通知するには、TableColumnModelListenerを使用します。

myTable.getColumnModel().addColumnModelListener(new TableColumnModelListener() { 
    //etc. 
}); 
+0

JDK 1.5には、ビューからモデルへの変更を適用する方法はありますか? – kiran

+1

列インデックスを変換するサポートが長い間存在していました。ソート/フィルタリングのサポートが追加されたため、JDK6では行インデックスの変換がサポートされました。 – camickr

+0

私は誤読しました。答えを更新しました。 – Barend

関連する問題