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)
我使用JTable和DefaultTableModel来查看各种信息的表 我想获得表格所选索引的某一列的值。
我上面写的代码工作正常,除非: 我使用GUI的那种(点击我要在表格上排序的字段名称) 该表已正确排序,但在此之后,当我选择一行时,它会得到 排序之前的行的值。 这意味着在排序后(使用JTable的GUI) 'myModel'和'resultsTable'对象具有不同的行索引。
如何同步这两个?
答案 0 :(得分:10)
您需要在JTable see the JavaDoc
上使用'convertXXX'方法int row = resultsTable.getSelectedRow();
if (row != -1) {
row = table.convertRowIndexToModel(row);
String value = (String) myModel.getValueAt(row, columnIndex)
答案 1 :(得分:0)
除了Guillaume给出的解决方案(谢谢) 我这样做了:
// 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 Object而不是myModel Object来获取值。
答案 2 :(得分:0)
使用JTable.getValueAt()
的问题是获取所需的列。当在GUI中移动列时,索引“更改”以匹配视图。通过使用AbstractTableModel.getValueAt()
和JTable.convertXXX()
(如Guillaume所述),只需在检索数据时使用模型的列索引即可。