【发布时间】:2013-01-16 18:48:03
【问题描述】:
我有一个有几列的 JTable。我想让 一些 列无法排序。我该怎么做?我一直在使用 Java 1.4,所以不能选择使用 TableRowSorter,因为它直到 1.6 才引入。
【问题讨论】:
-
如果 JTable 自己可以排序,我相信你一定能搞清楚。
-
你想只停止一列还是全部?
我有一个有几列的 JTable。我想让 一些 列无法排序。我该怎么做?我一直在使用 Java 1.4,所以不能选择使用 TableRowSorter,因为它直到 1.6 才引入。
【问题讨论】:
仅将RowSorter 应用于所需的列
(例如,只有伪代码,所有内容都是硬编码的,必须覆盖来自 ColumnModel 的列)
if (column >= 0 && column < getModelWrapper().getColumnCount()
&& isSortable(column)) {
与
if (column >= 0 && column <=1 /*getModelWrapper().getColumnCount()*/
&& isSortable(column)) {
在public void toggleSortOrder(int column) {
那么第二列不可排序
【讨论】:
将 JTable 上的 rowSorter 设置为空。见http://download.java.net/jdk7/archive/b123/docs/api/javax/swing/JTable.html#setRowSorter(javax.swing.RowSorter)
【讨论】:
如果您想对一些而不是其他进行排序,则必须实现一个侦听器。我用过这样的东西:
table.getTableHeader().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int col= table.getTableHeader().columnAtPoint(e.getPoint());
// column number col has been clicked -- sort if necessary,
// discard the event if sorting is not desired.
//
}
});
注意可以拖放行的表格;您可以使用
禁用此功能table.getTableHeader().setReorderingAllowed(false);
【讨论】: