JTable搜索未提供搜索到的行所选行数据

时间:2019-11-09 14:18:01

标签: java swing jtable tablerowsorter

我正在尝试将搜索到的行数据从JTable放入JTextField组件中,但是当我搜索时,并没有给搜索到的行选择行数据。

private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {                                     
    DefaultTableModel obj = (DefaultTableModel) jTable1.getModel();
    int row = jTable1.getSelectedRow();
    jTextField1.setText(obj.getValueAt(row, 1).toString());
    jTextField2.setText(obj.getValueAt(row, 2).toString());
}           

private void filter(String query) {
    TableRowSorter<DefaultTableModel> tr = new TableRowSorter<DefaultTableModel>(table);
    jTable1.setRowSorter(tr);
    tr.setRowFilter(RowFilter.regexFilter(query));
    TableRowSorter<DefaultTableModel> pr = new TableRowSorter<DefaultTableModel>(table3);
    jTable3.setRowSorter(pr);
    pr.setRowFilter(RowFilter.regexFilter(query));
}  

1 个答案:

答案 0 :(得分:0)

您的JTable已过滤,因此您无法使用表行索引直接从模型中获取数据,因为并非所有模型数据都显示在表中,因此您可能没有一对一的映射。

相反,您需要将表的行转换为TableModel中的实际行:

DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
int row = jTable1.getSelectedRow();
int modelRow = jTable1.convertRowIndexToModel(row);
jTextField1.setText(model.getValueAt(modelRow, 1).toString());
jTextField2.setText(model.getValueAt(modelRow, 2).toString());