JTable 中的选定行以及排序

Bha*_*ani 4 java swing jtable tablerowsorter

我对 JTable 有一个非常奇怪的问题。

我将数据从 DB 放入 JTable 中。当用户双击任何单元格时,它会复制用户双击所在行的第一列的单元格内容。到目前为止,它运行完美。

当用户通过单击标题对 JTable 进行排序时,就会出现问题。当表格已排序并且现在当用户双击任何行时,它不会当前存储在该行的第一列上。当 JTable 未排序时,它复制最初存储在该行第一列的内容。

有任何想法吗?

cнŝ*_*ŝdk 6

问题:

这里的问题是您获取的是 中的初始行索引JTable TableModel,而不是表视图中显示的相关行索引。

解决方案:

您可以使用convertRowIndexToModel(index) 方法将已排序 jTable 的显示索引与其在 dataModel 中的相关索引进行映射,该方法接收视图中的行索引并返回模型中相应行的索引。

假设您有以下 jTable:

TableModel myModel = createMyTableModel();
JTable table = new JTable(myModel);
table.setRowSorter(new TableRowSorter(myModel));
Run Code Online (Sandbox Code Playgroud)

然后循环遍历模型索引并对每个索引使用此方法以获取其对应的索引TableModel

table.getRowSorter().convertRowIndexToModel(0); // index 0 here
Run Code Online (Sandbox Code Playgroud)


小智 1

也尝试对 JTable TableModel 数据进行排序。Jtable -> TableModel 是保存实际数据的模型。JTable只是一个视图。