TableRowSorter/DefaultRowSorterが提供するものとは異なる挿入動作を持つJTableが必要です。カスタム挿入動作が必要な場合、RowSorterのカスタム実装を行う必要がありますか?
ユーザーが行を挿入するときに、新しく挿入された行がカーソルがあった場所の下に移動し、カーソルが新しく挿入された行に配置されるような表が必要です。 私は、例えば上に示してみましょう: - :
0. Row 1
1. Row 2 <-- cursor here
2. Row 3
3. Row 4
ユーザカーソルが2行目であり、ユーザが挿入をトリガ
初期状態表は、4行を有します。新しく挿入された行が下に表示され、カーソルもそこに移動します。
0. Row 1
1. Row 2
2. New row <-- cursor here
3. Row 3
4. Row 4
この問題を解決する方法は2つあります。
最初のアプローチはモデルを変更することです。そのため、モデル内の適切な場所に挿入が行われます。モデルインデックスは挿入された行の下のすべての行で変更されることを意味するので、私はこの解決策が嫌いです。これは私が必要とするものを達成する最も簡単な方法ですが、私が言ったように、モデルインデックスによって引き起こされる潜在的に大きなオーバーヘッドを犠牲にして...
2番目のアプローチは、独自のvideToModel []を維持するRowSorterを実装することですおよびmodelToView []配列を作成し、行が挿入されたときに正しい順序を維持します。もちろん、私はTableRowSorterを拡張して始めましたが、modelToViewとviewToModelはプライベート配列なので、アクセスできません。ローがフィルタリングされると問題が発生します。
私は自分のRowSorter実装を書くことを避けようとしています。
UPDATE 2013-10-07: 私は自分のRowSorterを実装することでこれを達成しました。両方のアプローチを試した後、私は2番目のアプローチがより柔軟になることを認識しました。
モデルの途中でデータを挿入する際の具体的なパフォーマンスのヒットを知っていますか?そうでなければ、正しいモデルインデックス(選択された行のビューインデックスから変換されたもの)で 'DefaultTableModel.insertRow()'を呼び出すことで、最初のオプションに傾いています。 –