6

私はJXTableSwingXコンポーネントからのものを使用しています。メソッドを使用setSortable(boolean flag)すると、すべての列の並べ替えが有効または無効になります。

私の要件では、いくつかの列の並べ替えを無効にし、他の列の並べ替えを有効にしたいと考えています。

誰でもこの機能を達成するのを助けることができますか?


お返事をありがとうございます。setSorterClass(String sorterClassName)1 つの列の並べ替えを無効にする方法を教えてください。コード例を教えてください。とても参考になります。

4

3 に答える 3

4

SwingXは、TableColumnExtのレベルで列ごとの並べ替え可能なプロパティをサポートします。列の作成後に無効にするには、デフォルト値はtrueです。

table.getColumnExt(myColumnIndex).setSortable(false)

または、作成時に、次のようなカスタムColumnFactoryを使用します

ColumnFactory factory = new ColumnFactory() {

    @Override
    public void configureTableColumn(TableModel model, TableColumnExt column) {
        super.configureTableColumn(model, column);
        if (... your condition to disable sortable) {
            column.setSortable(false);
        } 
    }
} 
table.setColumnFactory(factory);
table.setModel(model);

タイプがSortController(デフォルト)の場合、JXTableは列プロパティをソーターに同期します。

于 2011-06-14T13:11:41.393 に答える
2

少なくともネットで見つけたものによると、 setSorterClass(null)その列を設定することでそれを達成できると思います。

キャッシュされた Web サイトで読むことができるように、swinglabs のチュートリアル ページがダウンしているように見えますが、java.net サービスの最近の混乱と関係があるに違いありません。 「JXTables では、列の並べ替えがデフォルトでオンになっています。setSortingEnabled(boolean allowSort) を使用して、すべての列の並べ替えを無効にすることができます。また、setSorterClass(String sorterClassName) を null のソーター クラス名で使用して、単一の列の並べ替えを無効にすることもできます。」

個人的には、ユーザーが選択したテーブル列での並べ替えをブロックしても意味がないと思います。とにかく、ユーザーが列をソートしたい場合は、それができるはずですが、最終的には、ユーザーができることなどの詳細に行くときは、ユーザーに多くのことを許可する方が良いと思います。彼/彼女の視点でコントロールします。

于 2011-05-21T09:57:12.267 に答える
1

TableRowSorter APIを見て、JXTable が次のようにサポートしているかどうかを確認する必要があると思います。

TableModel myModel = createMyTableModel();
JTable table = new JTable(myModel);
table.setRowSorter(new TableRowSorter(myModel));

TableRowSorter には API メソッドisSortable()があります。

public boolean isSortable(int column)

指定された列が並べ替え可能な場合は true を返します。それ以外の場合は false。

パラメータ: column - 基礎となるモデルに関して、ソートをチェックする列

戻り値: 列がソート可能な場合は true

于 2011-05-21T10:03:48.833 に答える