从JTable排序中排除列

Fed*_*rgi 3 java swing jtable

我有一个简单的Swing JTable和一个TableRowSorter.但是,我会从排序中排除第一列,因为我想保持它显示行号.我看不到任何东西,除了

sorter.setSortable(0, false);
Run Code Online (Sandbox Code Playgroud)

这使得列不可点击,但在单击另一列时仍然可以排序...所以快速的问题是:如何使列不被TableRowSorter排序?

谢谢!

Dev*_*ler 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 |
Run Code Online (Sandbox Code Playgroud)

我会用第2 列的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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