首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在使用RowSorter时获取JTable上的数据?

如何在使用RowSorter时获取JTable上的数据?
EN

Stack Overflow用户
提问于 2018-09-16 18:38:36
回答 2查看 66关注 0票数 0

JTable中选择行时,我在获取数据时遇到问题。每当我启用表的setAutoCreateRowSorter(true)时,就会发生这种情况。到目前为止,我是这样做的:

代码语言:javascript
复制
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方法中,我是这样做的:

代码语言:javascript
复制
 ...
 if(bookTable.getSelectedRow() >= 0){
     Book book = books.get(bookTable.getSelectedRow());
        setBook(book);
 }...

现在,当我单击标题表对数据进行排序时,我得到了不明确的数据。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-16 19:14:59

JTable实例上选择的行号始终是在视图侧上选择的行号

如果激活行排序,这将不再与模型端的行号相匹配。

为了在这两个行号之间进行转换,JTable提供了从“视图行索引”到“模型行索引”的转换方法,反之亦然。这些方法被命名为convertRowIndexToModelconvertRowIndexToView

在mouseClicked处理程序中,您需要调用函数convertRowIndexToModel,如下所示:

代码语言:javascript
复制
if (bookTable.getSelectedRow() >= 0){
    Book book = books.get(bookTable.convertRowIndexToModel(bookTable.getSelectedRow()));
    setBook(book);
}
票数 3
EN

Stack Overflow用户

发布于 2018-09-17 01:51:54

问题是您将数据存储在两个位置:

  1. in TableModel
  2. in an ArrayList

数据应该只存储在TableModel中。这样你就不需要担心同步数据了,因为它只在一个地方。

您只需使用getValueAt(..)从所选行创建一个Book对象。JTable的方法。您需要为表中的每一列调用该方法。

或者,另一种方法是创建一个包含图书对象的自定义TableModel,然后可以直接从表中获取图书对象。这是一个稍微多一点的工作,但这是更好的方法。

请查看Row Table Model,了解如何为自定义对象创建自定义TableModel的逐步方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52353241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档