0

並べ替え機能とフィルター機能を備えたユーザー ビュー (テーブル) を作成したいと考えています。EventTableModel のソースとしてEventList ( Glazed Lists ) を使用します。また、GlazedLists には Sorted List といくつかのフィルタリング項目があるので、それらを使用してビューを作成できます。しかし、私はJXTableを見つけ、それにはソートとフィルタリングのメソッドがあり、これがどのように機能するかを示しています.ソートとフィルタリングはUIコンポーネントを提供する必要があり、モデルはデータを保持できます:

EventList<Item> source=new BasicEventList<Item>();
TableModel model=new DefaultEventTableModel<Item>(source,tableFormat); // It'll be
//perfect if I could create model without tableFormat,
//because it's presentation of data,
//but in GlazedLists I can't :( ...
JTalbe ui=new JXTable(model); // UI with sorting and filtering

ただし、GlazedLists は、SortedList (Sorting を使用した EventList のデコレータ) といくつかのフィルタリング メソッドも提供します。

EventList<Item> source=new BasicEventList<Item>();
SortedList<Item> sortedSource=new SortedList<Item>(source,comparator);
TableModel model=new DefaultEventTableModel<Item>(sortedSource,tableFormat); 
// model with sorting... not very beautifull for me, but what do you think?

JTable ui=new JTable(model); // UI with sorting provided by model

そして問題は、どのモデルが優れているかです。または、両方が間違っている可能性があり、ビューの作成に何を使用しますか?

4

2 に答える 2

1

DefaultEventTableModel を使用する場合は、すべて問題ありません。モデルとして、ソーターを EventList ソースに登録します。2番目のリストのように内部で行われます。ソーターを手動で登録する場合は、コンパレーター (asc、desc など) を変更するためにすべてのコードを実装する必要があります。フィルタリングを使用しようとする場合も同じですが、JXTable imho はこのメカニズムをサポートしていないため、独自の方法でこれを行う必要があります。

于 2011-10-22T12:32:39.377 に答える
0

機能するので、GlazedLists に投票します。はい、テーブルで使用する TableModel はビューに密接に結合されていますが、そのテーブル モデルをソース データから切り離します。

GlazedLists のソートおよびフィルタリング機能は、JXTable のものよりもはるかに柔軟です。両方がオンになっていないことを確認してください。そうしないと、混乱が生じます。JXTable で SortedList を使用するための通常のコード スニペットを次に示します。

private <T> EventTableModel<T> setupTable(JXTable table, TableFormat<T> tf, EventList<T> displayItems, SortedList<T> sortedItems)
{
    table.setColumnControlVisible(true);
    table.setSortable(false);
    table.getTableHeader().setDefaultRenderer(new JTableHeader().getDefaultRenderer());
table.setAutoCreateRowSorter(false);
table.setRowSorter(null);

    EventTableModel<T> etm = new EventTableModel<T>(displayItems, tf);
    table.setModel(etm);

    TableComparatorChooser.install(table, sortedItems, AbstractTableComparatorChooser.SINGLE_COLUMN);
    return etm;
}

これが何をするか:

  • JXTable の右上にある列ピッカー ガジェットをオンにします。
  • JXTable の組み込みソートを無効にする
  • 代わりに GlazedLists のソート機能をインストールしてください
  • TableFormat から派生した EventTableModel を使用してテーブルをセットアップする

パイプラインの最後のリストである displayItems と、並べ替えに使用される列を制御するために使用される sortedList の2 つのEventListsを渡すことに注意してください。(最後の要素が sortedList の場合、その後は何も処理せずに、リストを 2 回渡します。)

于 2011-12-02T19:57:49.827 に答える