如何从筛选的jtable中选择并显示正确的行?

n9vozmp4  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(384)

我的代码是,用户在textfield中输入他想要搜索的内容,并在jtable中自动过滤,但我有一个函数,当用户单击一行时,该行中的数据将显示在不同的jframe中。例如,在jtable中,我对第1、2、3、4、5、6行进行了筛选,结果是第2和第5行,当我单击第2行时,它将从未筛选表中的原始第1行复制数据
这段代码的第一部分是从textfield过滤我的jtable的函数

private void filter(String query){
        DefaultTableModel model = (DefaultTableModel) History_Table.getModel();
        TableRowSorter<DefaultTableModel> tr=new TableRowSorter<DefaultTableModel>(model);
        History_Table.setRowSorter(tr);
        tr.setRowFilter(RowFilter.regexFilter(query.trim()));

}

这是行选择的代码,将数据放到另一个jframe的文本区域中

private void History_TableMouseClicked(java.awt.event.MouseEvent evt) {                                           
    // TODO add your handling code here:

    int index = this.History_Table.getSelectedRow();
    TableModel model = History_Table.getModel();
    String name= model.getValueAt(index, 1).toString();
    String dov= model.getValueAt(index, 2).toString();
    String notes= model.getValueAt(index, 4).toString();
    String drugs= model.getValueAt(index, 5).toString();
    String diagnosis= model.getValueAt(index, 6).toString();

    jtRowData.setVisible(true);
    jtRowData.pack();
    jtRowData.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

    jtRowData.nameA.setText(name);
    jtRowData.diagnosisA.setText(diagnosis);
    jtRowData.DateA.setText(dov);
    jtRowData.jTextArea2.setText(notes);
    jtRowData.DrugsA.setText(drugs);

}
tag5nh1u

tag5nh1u1#

int index = this.History_Table.getSelectedRow();
TableModel model = History_Table.getModel();
String name= model.getValueAt(index, 1).toString();
String dov= model.getValueAt(index, 2).toString();
String notes= model.getValueAt(index, 4).toString();
String drugs= model.getValueAt(index, 5).toString();
String diagnosis= model.getValueAt(index, 6).toString();

对表进行筛选(或排序)时,模型中的数据不会更改,仅对视图中的数据进行筛选(或排序)。
因此,需要将视图中当前选定的行Map到模型中的行:

int modelRow = table.convertRowIndexToModel​( table.getSelectedRow() );
TableModel model = table.getModel();
String name= model.getValueAt(modelRow, 1).toString();
String dov= model.getValueAt(modelRow, 2).toString();
String notes= model.getValueAt(modelRow, 4).toString();
String drugs= model.getValueAt(modelRow, 5).toString();
String diagnosis= model.getValueAt(modelRow, 6).toString();

相关问题