我有一个简单的Swing JTable和TableRowSorter由我制作。但是,我会排除排序中的第一列,因为我想保留它以显示行号。 我看不出找到任何东西,除了从JTable排序列排除
sorter.setSortable(0, false);
这使得该列不点击,但仍然排序单击另一列时... 这么快的问题将是:如何从被保持柱由TableRowSorter分拣机?
谢谢!
我有一个简单的Swing JTable和TableRowSorter由我制作。但是,我会排除排序中的第一列,因为我想保留它以显示行号。 我看不出找到任何东西,除了从JTable排序列排除
sorter.setSortable(0, false);
这使得该列不点击,但仍然排序单击另一列时... 这么快的问题将是:如何从被保持柱由TableRowSorter分拣机?
谢谢!
因此,使用JTable(如下)在列A上排序会产生以下结果。但是,您希望数据进行排序,但不是行号,对吗?
|row| column A | |row| column A |
+---+-----------+ +---+-----------+
| 1 | blah blah | --> | 1 | blah blah |
| 2 | something | | 3 | more blah |
| 3 | more blah | | 2 | something |
我将与TableCellRenderer接近此为0列,关键是要忽略传入的值,而使用该行参数。
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
获取要显示的行号。
JTable是围绕显示数据行而不是数据单元而设计的,所以实际上不可能防止按照您的说法排列单个列。相反,我会尝试修改您的TableModel
返回的行索引值在该列:
@Override public Object getValueAt(int rowIndex, int columnIndex) {
if (columnIndex == 0) return rowIndex;
else {
// handle other columns
}
}
如果不工作,你也可以尝试修改表单元格渲染器使用表的行号代替。
如果行号不是数据的一部分,那么它不应该存储在模型中。
相反,我会使用显示行号的行标题。像你这样的东西会在Excel中看到。你可以使用这个Row Number Table。
感谢您的回答:-)我已经按照您的说法实施了getValueAt(),但是当单击其他列时,该列仍可排序。我将尝试使用表格单元格渲染器。 – 2011-02-04 16:46:47
第二个想法奏效,谢谢。只需在不想排序的TableColumn上执行setCellRenderer,然后创建一个TableCellRenderer,其值为value = rowIndex + 1; – 2011-02-04 17:06:03