对 JTable 进行排序后,JTable 和 DefaultTableModel 的行索引失去同步

发布于 2024-09-05 17:51:42 字数 574 浏览 6 评论 0原文

爪哇 NETBEANS

// resultsTable, myModel
JTable resultsTable;
DefaultTableModel myModel; //javax.swing.table.DefaultTableModel
myModel = (DefaultTableModel) resultsTable.getModel();

// event of clicking on item of table
String value = (String) myModel.getValueAt(resultsTable.getSelectedRow(), columnIndex)

我使用 JTable 和 DefaultTableModel 来查看各种信息的表格 我想获取表中选定索引的某一列的值。

我上面写的代码工作正常,除了以下情况: 我使用GUI的排序(点击表格上我想要排序的字段名称) 该表已正确排序,但之后当我选择一行时,它会出现 排序之前存在的行的值。 这意味着排序后(使用 JTable 的 GUI) “myModel”和“resultsTable”对象具有不同的行索引。

我如何同步这两个?

JAVA
NETBEANS

// resultsTable, myModel
JTable resultsTable;
DefaultTableModel myModel; //javax.swing.table.DefaultTableModel
myModel = (DefaultTableModel) resultsTable.getModel();

// event of clicking on item of table
String value = (String) myModel.getValueAt(resultsTable.getSelectedRow(), columnIndex)

I use JTable and DefaultTableModel to view a table of various info
and I want to get a value of a certain column of the selected index of the table.

The code I wrote above works fine except when:
I use the sort of the GUI (click on the field name I want to sort on the table)
The table is properly sorted but after that when I select a row, it gets
the value of the row that was there before the sort.
This means that after sorting (using the JTable's GUI)
the 'myModel' and 'resultsTable' objects have different row indexes.

How do I synchronize those two?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

屋檐 2024-09-12 17:51:42

您需要在 JTable 查看 JavaDoc

int row = resultsTable.getSelectedRow();
if (row != -1) {
   row = table.convertRowIndexToModel(row);
   String value = (String) myModel.getValueAt(row, columnIndex)

You need to use the 'convertXXX' methods on the JTable see the JavaDoc

int row = resultsTable.getSelectedRow();
if (row != -1) {
   row = table.convertRowIndexToModel(row);
   String value = (String) myModel.getValueAt(row, columnIndex)
凉城 2024-09-12 17:51:42

使用 JTable.getValueAt() 的一个问题是获取所需的列。当列在 GUI 中移动时,索引会“更改”以匹配视图。通过使用 AbstractTableModel.getValueAt()JTable.convertXXX() (如 Guillaume 概述),只需在检索数据时使用模型的列索引即可。

A problem with using the JTable.getValueAt() is to get the column you want. When the columns are moved around in the GUI the indexes "change" to match the view. By using the AbstractTableModel.getValueAt() and the JTable.convertXXX() (as outlined by Guillaume) it's just a matter of using the column indexes for the model when retrieving data.

谜兔 2024-09-12 17:51:42

除了纪尧姆给出的解决方案(谢谢)
我这样做了:

// resultsTable, myModel

JTable resultsTable;

DefaultTableModel myModel; //javax.swing.table.DefaultTableModel

myModel = (DefaultTableModel) resultsTable.getModel();

// event of clicking on item of table

String value = (String) **resultsTable**.getValueAt(resultsTable.getSelectedRow(), columnIndex)

我使用 resultsTable 对象而不是 myModel 对象来获取值。

Except from the solution Guillaume gave (Thanks)
I did this:

// resultsTable, myModel

JTable resultsTable;

DefaultTableModel myModel; //javax.swing.table.DefaultTableModel

myModel = (DefaultTableModel) resultsTable.getModel();

// event of clicking on item of table

String value = (String) **resultsTable**.getValueAt(resultsTable.getSelectedRow(), columnIndex)

I used the resultsTable Object instead of the myModel Object to get the value.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文