【发布时间】:2011-05-21 09:21:52
【问题描述】:
我正在使用来自 SwingX 组件的JXTable。如果我使用setSortable(boolean flag) 方法,那么它将启用或禁用所有列的排序。
根据我的要求,我想禁用一些列的排序并启用其他列的排序。
谁能帮助实现这个功能?
感谢您的回复。您能帮我使用setSorterClass(String sorterClassName) 禁用一列的排序吗?你能给我任何代码示例吗?这对我很有帮助。
【问题讨论】:
我正在使用来自 SwingX 组件的JXTable。如果我使用setSortable(boolean flag) 方法,那么它将启用或禁用所有列的排序。
根据我的要求,我想禁用一些列的排序并启用其他列的排序。
谁能帮助实现这个功能?
感谢您的回复。您能帮我使用setSorterClass(String sorterClassName) 禁用一列的排序吗?你能给我任何代码示例吗?这对我很有帮助。
【问题讨论】:
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(这是默认设置)
【讨论】:
我认为,至少根据我在网上找到的内容,您可以通过设置来实现
setSorterClass(null) 用于该列。
正如我们在the cached web site 上看到的那样,swinglabs 教程页面似乎已关闭,我敢打赌这与 java.net 服务最近的混乱有关。 “JXTables 默认启用列排序。您可以使用 setSortingEnabled(boolean allowSort) 禁用所有列排序。您还可以使用带有空排序器类名称的 setSorterClass(String sorterClassName) 禁用单个列的排序。”
就个人而言,我认为阻止用户对选定的表列进行排序是没有意义的。无论如何,如果用户想要对列进行排序,他/她应该能够这样做,最后我相信最好让用户多而不是少,当然,当涉及到他/她可以做什么的细节时控制在他/她的视野中。
【讨论】:
我想你应该看看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 - 要的列 检查排序,根据 底层模型
返回:如果 列是可排序的
【讨论】: