【问题标题】:How can I sort Columns by Row values?如何按行值对列进行排序?
【发布时间】:2012-03-14 21:15:20
【问题描述】:

网上有[太多]关于如何按列值对JTable的进行排序的示例。

目前我通过实现AbstractTableModel 并覆盖getColumnClass 来返回数据的实际类。然后拨打setAutoCreateRowSorter

如何按行值对 JTable 中的进行排序?

【问题讨论】:

  • 这不是重复的。上面的问题是关于排序的Rows,我要对Columns进行排序。
  • hmm .. 不太明白你在追求什么,但据我所知,核心不支持它:行和列在语义上是 not 可交换的。有支持数据透视表的框架,也许它们可以直接使用或用于灵感

标签: java swing jtable


【解决方案1】:

1) 将TableHeader 中的所有值提取到可短数组中(可以是AbstractTableModel 中的方法)

2) 在数组内循环并调用

TableColumn column = table.getColumnModel().moveColumn(columnIndex, newIndex);

3) 对于所有使用 Model vs. 的方法需要查看(反之亦然)添加

table/model#convertXxxIndexToXxx

4) 要重置,您必须通过调用在AbstractTableModel 中创建方法

fireTableDataChanged(); or fireTableStructureChanged(); // not sure in this case

5) 关于上面两个fireTableXxxXxx的注意事项

This can be a problem if you have added any custom renderers or editor to 
the table as you would lose them (by @camickr)

【讨论】:

    【解决方案2】:

    只需在 JTable 上定义和设置 RowSorter。这是一个简单的教程:

    http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting

    【讨论】:

    • 我想对列而不是行进行排序。 RowSorters 对行进行排序。
    【解决方案3】:

    您可以通过单击列标题对值进行排序,如果这是您所要求的。

    【讨论】:

    • 我想对列进行排序。当您单击标题时,它会对行进行排序。
    • 我认为没有内置功能。您应该自己排序,获取索引并重置列位置。
    • 您可能可以通过实现 TableModel 的破解版本来实现。
    猜你喜欢
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 2020-03-08
    • 2016-09-05
    • 2012-08-29
    相关资源
    最近更新 更多