从JTable
中选择一行时获取数据时出现问题。只要启用表的setAutoCreateRowSorter(true)
,就会发生这种情况。到目前为止,这是我所做的:
private void displayBooks(){
bookTable.setAutoCreateRowSorter(true);
bookTable.getTableHeader().setFont(new java.awt.Font("Century Gothic", 1, 14));
dtm = (DefaultTableModel) bookTable.getModel();
clearTable(dtm);
for(Book book: books){
dtm.addRow(new Object[]{book.getId(), ...//rest of the code
}
}
在
bookTableMouseClicked
方法上,这就是我所做的: ...
if(bookTable.getSelectedRow() >= 0){
Book book = books.get(bookTable.getSelectedRow());
setBook(book);
}...
单击标题表对数据进行排序时,我现在的数据不明确。
最佳答案
JTable
实例上的选定行号始终是视图侧的选定行号。
如果激活行排序器,则它不再与模型侧的行号匹配。
为了在这两个行号之间转换,JTable
提供了从“视图行索引”转换为“模型行索引”的方法,反之亦然。这些方法分别命名为convertRowIndexToModel
和convertRowIndexToView
。
在mouseClicked处理程序中,您需要按以下方式调用函数convertRowIndexToModel
:
if (bookTable.getSelectedRow() >= 0){
Book book = books.get(bookTable.convertRowIndexToModel(bookTable.getSelectedRow()));
setBook(book);
}