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提供了从“视图行索引”转换为“模型行索引”的方法,反之亦然。这些方法分别命名为convertRowIndexToModelconvertRowIndexToView

在mouseClicked处理程序中,您需要按以下方式调用函数convertRowIndexToModel

if (bookTable.getSelectedRow() >= 0){
    Book book = books.get(bookTable.convertRowIndexToModel(bookTable.getSelectedRow()));
    setBook(book);
}

07-24 09:19