2012-02-21 33 views
1

jideを使用するI fixプロジェクトSortableTable。テーブルに英語のみのデータが含まれている場合、並べ替えはうまく動作します。データが西欧言語の混合言語である場合、ソートは失敗します。SortableTableのカスタム並べ替え

私がデータコレクションを「SECONDARY」強度のCollatorを使用してソートすると、正常に動作します。

質問は、どのようにセカンダリのコレクタ強度またはカスタムコンパレータを使用してデータをソートするためのSortableTableを作成するのですか?

+0

これは[JIDEソフトウェア開発者フォーラム](http://www.jidesoft.com/forum/)の質問ですが、他の手では時にはユーザー[jidesoft](http://stackoverflow.com/users/1029967/jidesoft)ここを見てください – mKorbel

+0

私はここで助けを得なければ私はそこに試みます。しかし、それはstackoverflowのユーザーはほとんどすべてを知っているようだ:) – YuriR

+0

mKorbel:私はJIDEフォーラム同様のスレッドで見つかりました。それが私を正しい解決に導くことを願っています。ありがとうございました。 – YuriR

答えて

2

JIDEのSortableTableModelは、ObjectComparatorManagerを使用してコンパレータを取得します。 Collat​​orを登録することができます(デフォルトでは、PRIMARYコレータを使用します)

Collat​​or collat​​or = Collat​​or.getInstance(); collat​​or.setStrength(Collat​​or.SECONDARY);

ObjectComparatorManager.registerComparator(String.class、collat​​or、new ComparatorContext( "Collat​​orSecondary")); // "Collat​​orSecondary"は、あなたのアプリケーション内で一意の文字列になります

SortableTableModelサブクラスでは、列のgetColumnComparatorContext(int列)をオーバーライドして新しいComparatorContext( "Collat​​orSecondary")を返します。

もう1つの簡単な方法は、この動作を1つのテーブルにまとめたい場合は、SortableTableModelのgetComparator(int列)をオーバーライドすることです。

SortableTableModelのsetAlwaysUseComparators(true)を呼び出す必要があるかもしれません。これはパフォーマンス上の理由から、コンパレータを使用せずにセル値のcompareToメソッドを使用したためです。

+1

これで動作します。ありがとうございました! – YuriR

0

継承と多型についてはどうですか? SortableTableから新しいクラスをサブクラス化し、カスタム動作を追加できます。 SortableTableが必要なインスタンスを使用します。

+0

はい、正しい方向に見えます。私はすでにそれを試しましたが、どの機能を上書きすべきかは不明です。 – YuriR

+0

サブクラスのカスタムコンストラクタを作成し、Collat​​orに基づくカスタムコンパレータを初期化する必要があると思います。 –

+0

ありがとう、私はしようとします。 – YuriR