任务是过滤jTable中的数据并传递选定的值。问题是,在过滤jTable中的数据之后,它会输出旧值,该值位于过滤前的那个位置。
假设我有一个只有一列的表,值是1,2,3,4,5,6。过滤后,jTable中只有一个值,即6。因此,它应该输出6,但输出为1。因为过滤前表中存在1。在下面的代码中,第一个函数根据文本字段中提供的文本过滤表。第二功能输出选择值。如何更新jTable,因此它根据过滤数据而不是原始表为我提供输出。谢谢。
private void jTextField_searchRecordKeyReleased(java.awt.event.KeyEvent evt) {
DefaultTableModel table=(DefaultTableModel)this.jTable_Search.getModel();
String query=this.jTextField_searchRecord.getText();
TableRowSorter<DefaultTableModel> tr=new TableRowSorter<DefaultTableModel>(table);
jTable_Search.setRowSorter(tr);
tr.setRowFilter(RowFilter.regexFilter("(?i)" + query));
}
private void jButton_LocateMouseClicked(java.awt.event.MouseEvent evt) {
int column = 0;
int rows[]=this.jTable_Search.getSelectedRows();
for(int i=0;i<rows.length;i++)
{
String value = jTable_Search.getModel().getValueAt(rows[i], column).toString();
System.out.println(value);
}
}
答案 0 :(得分:2)
表和模型中的选择索引是两个不同的东西。但是您可以将一个转换为另一个。 JTable
API有一些转换方法。对于您而言,方法convertRowIndexToModel
很重要。因此您的代码应如下所示:
private void jButton_LocateMouseClicked(java.awt.event.MouseEvent evt) {
int column = 0;
int rows[]=this.jTable_Search.getSelectedRows();
for(int i=0;i<rows.length;i++)
{
int modelRow = jTable_Search.convertRowIndexToModel(rows[i]);
String value = jTable_Search.getModel().getValueAt(modelRow, column).toString();
System.out.println(value);
}
}
另一种可能性是使用表的方法getValueAt
。
private void jButton_LocateMouseClicked(java.awt.event.MouseEvent evt) {
int column = 0;
int rows[]=this.jTable_Search.getSelectedRows();
for(int i=0;i<rows.length;i++)
{
String value = jTable_Search.getValueAt(rows[i], column).toString();
System.out.println(value);
}
}