Поиск в JTable не дает выбранной строке данные выбранной строки - PullRequest
0 голосов
/ 09 ноября 2019

Я пытаюсь получить искомые данные строки из 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 голосов
/ 09 ноября 2019

Ваш 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());
...