【问题标题】:Sorting JXTable with SwingX使用 SwingX 对 JXTable 进行排序
【发布时间】:2011-05-21 09:21:52
【问题描述】:

我正在使用来自 SwingX 组件的JXTable。如果我使用setSortable(boolean flag) 方法,那么它将启用或禁用所有列的排序。

根据我的要求,我想禁用一些列的排序并启用其他列的排序。

谁能帮助实现这个功能?


感谢您的回复。您能帮我使用setSorterClass(String sorterClassName) 禁用一列的排序吗?你能给我任何代码示例吗?这对我很有帮助。

【问题讨论】:

    标签: java swingx jxtable


    【解决方案1】:

    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);
    

    JXTable 将负责将列属性同步到排序器,前提是它的类型为 SortController(这是默认设置)

    【讨论】:

    • +1 很好地解释并介绍了如何做到这一点。感谢您纠正/更新我。 :)
    【解决方案2】:

    我认为,至少根据我在网上找到的内容,您可以通过设置来实现 setSorterClass(null) 用于该列。

    正如我们在the cached web site 上看到的那样,swinglabs 教程页面似乎已关闭,我敢打赌这与 java.net 服务最近的混乱有关。 “JXTables 默认启用列排序。您可以使用 setSortingEnabled(boolean allowSort) 禁用所有列排序。您还可以使用带有空排序器类名称的 setSorterClass(String sorterClassName) 禁用单个列的排序。”

    就个人而言,我认为阻止用户对选定的表列进行排序是没有意义的。无论如何,如果用户想要对列进行排序,他/她应该能够这样做,最后我相信最好让用户多而不是少,当然,当涉及到他/她可以做什么的细节时控制在他/她的视野中。

    【讨论】:

    • 同意“没有必要阻止用户对选定的表格列进行排序”+1
    • 那是过时的(或更准确地说:从 1.6 起不再存在 ;-) api。
    • @kleopatra 很有趣。我不知道这个事实。而且我找不到更好的答案,因为使用网页的困难是java.net迁移的结果(对我来说更像是毁灭性的:))项目。我想知道你会建议什么?
    【解决方案3】:

    我想你应该看看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 是可排序的;否则为假。

    参数:column - 要的列 检查排序,根据 底层模型

    返回:如果 列是可排序的

    【讨论】:

    • 感谢您的回复。您能否帮助了解如何使用 setSorterClass(String sorterClassName) 禁用对一列的排序。你能给出任何代码示例吗?这对我很有帮助。
    • -1 用于传播不摇摆不定的方法。如果您不了解 SwingX/JXTable,则没有义务回答 ;-)
    猜你喜欢
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多