jide SortableTable を使用するプロジェクトを修正しました。テーブルに英語のみのデータが含まれている場合、並べ替えは問題なく機能します。データが西ヨーロッパ言語が混在している場合、並べ替えは失敗します。
強度「SECONDARY」のCollatorを使用してデータ コレクションを並べ替えると、正常に動作します。
問題は、SortableTable を作成して、SECONDARY コレーターの強度またはカスタム コンパレーターを使用してデータを並べ替える方法です。
jide SortableTable を使用するプロジェクトを修正しました。テーブルに英語のみのデータが含まれている場合、並べ替えは問題なく機能します。データが西ヨーロッパ言語が混在している場合、並べ替えは失敗します。
強度「SECONDARY」のCollatorを使用してデータ コレクションを並べ替えると、正常に動作します。
問題は、SortableTable を作成して、SECONDARY コレーターの強度またはカスタム コンパレーターを使用してデータを並べ替える方法です。
JIDE の SortableTableModel は ObjectComparatorManager を使用してコンパレータを取得します。Collator を登録できます (デフォルトでは、PRIMARY collator を使用します)
Collator collator = Collator.getInstance(); collator.setStrength(Collator.SECONDARY);
ObjectComparatorManager.registerComparator(String.class, collator , new ComparatorContext("CollatorSecondary")); // "CollatorSecondary" は、アプリ内で一意の任意の文字列にすることができます
次に、SortableTableModel サブクラスで、列の getColumnComparatorContext(int column) をオーバーライドして、新しい ComparatorContext("CollatorSecondary") を返します。
別の簡単な方法は、1 つのテーブルでこの動作が必要な場合は、SortableTableModel の getComparator(int column) をオーバーライドすることです。
最後になりましたが、SortableTableModel の setAlwaysUseComparators(true) を呼び出す必要がある場合もあります。これは、パフォーマンスを考慮して、コンパレータを使用せずにセル値の compareTo メソッドを使用できる場合はそれを使用したためです。
継承とポリモーフィズムはどうですか?SortableTableから新しいクラスをサブクラス化し、カスタム動作を追加できます。そして、SortableTableが必要な場所でそのインスタンスを使用します。