从JTable排序中排除列

时间:2011-02-04 16:16:59

标签: java swing jtable

我有一个简单的Swing JTable和一个TableRowSorter。但是,我会从排序中排除第一列,因为我想保持它显示行号。 除了

,我看不到任何东西
sorter.setSortable(0, false);

这使得列无法点击,但在单击另一列时仍可排序... 如此简单的问题是:如何通过TableRowSorter保持列不被排序?

谢谢!

3 个答案:

答案 0 :(得分:5)

因此,使用JTable(以下)对A列进行排序会产生以下结果。但是,您希望数据排序,而不是行号,是否正确?

|row| column A  |       |row| column A  |
+---+-----------+       +---+-----------+
| 1 | blah blah |  -->  | 1 | blah blah |
| 2 | something |       | 3 | more blah |
| 3 | more blah |       | 2 | something |

对于第0列,我会使用TableCellRenderer来处理此问题。诀窍是忽略传递的值,而是使用row参数。

public class RowRenderer extends JLabel implements TableCellRenderer {
    public Component getTableCellRendererComponent(JTable table, Object color,
        boolean isSelected, boolean hasFocus, int row, int column) {
        setText(Integer.toString(row));
        return this;
    }
}

注意:如果您对表进行分页(即模型不包含所有行;例如只有行100-200),您需要建议单元格渲染器的数量为添加到row以获取要显示的行号。

答案 1 :(得分:1)

JTable是围绕显示数据行而不是数据单元而设计的,因此实际上不可能阻止单个列进行排序。相反,我会尝试修改您的TableModel以返回该列值的行索引:

@Override public Object getValueAt(int rowIndex, int columnIndex) {
    if (columnIndex == 0) return rowIndex;
    else {
        // handle other columns
    }
}

如果这不起作用,您也可以尝试修改表格单元格渲染器以改为使用表格行索引。

答案 2 :(得分:0)

如果行号不是数据的一部分,则不应将其存储在模型中。

相反,我会使用显示行号的行标题。像你在Excel中看到的东西。您可以使用Row Number Table进行此操作。