JTable search not giving the searched row selected row data

263 Views Asked by At

I am trying to get the searched row data from JTable into JTextField components but when I'm searching it is not giving the searched row selected row data.

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

There are 1 best solutions below

0
camickr On

Your JTable is filtered so you can't get the data directly from the model using the table row index because not all the model data is displayed in the table so you may not have a one-to-one mapping.

Instead you need to convert the row of the table to the actual row in the 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());