我有一個簡單的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