禁用JTable上的列标题排序

时间:2014-01-03 11:58:05

标签: java swing sorting jtable

添加分拣机后是否可以在JTable上禁用手动排序?所以我有一个JTable,它附加了以下分类器(基本上在初始化表时按第3列排序):

JTable jTable = new JTable();
RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(jTable.getModel());
List<RowSorter.SortKey> sortKeys = new ArrayList<RowSorter.SortKey>();
sortKeys.add(new RowSorter.SortKey(3, SortOrder.DESCENDING));
sorter.setSortKeys(sortKeys); 
jTable.setRowSorter(sorter);

这样可以正常工作,但是用户仍然可以单击表中的列标题并按我要禁用的任何列进行排序。这可能吗?

3 个答案:

答案 0 :(得分:13)

您可以使用 TableRowSorter setSortable 方法,如下所示:

sorter.setSortable(0, false); 

使第0列不可排序。您可以根据您的要求在列上应用它。

答案 1 :(得分:5)

或者,您可以设置可排序和不可排序的列,如下所示:

TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(table.getModel()) {
    @Override
    public boolean isSortable(int column) {
        if(column < 2)
            return true;
        else 
            return false;
    };
};
table.setRowSorter(sorter);

答案 2 :(得分:0)

我最近遇到了同样的问题,并且找到了解决该问题的完美方法。只需禁用var profile: Profile? override func viewDidLoad() { super.viewDidLoad() ProfileService.show { [weak self] (profile) in self?.profile = profile if let points = profile?.posPoints { DispatchQueue.main.async { self?.myPointsLabel.text = String(points) } } } }

TableHeader

这样,排序器可以完美地在任何列上使用,但是通过单击“列标题”可以阻止手动排序

希望这对将来可能希望了解它的用户有所帮助。