微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从过滤后的 jtable 中选择和显示右行?

如何解决如何从过滤后的 jtable 中选择和显示右行?

我的代码是,用户在文本字段中输入他想搜索内容,并在 jtable 中自动过滤,但我有一个功能,当用户单击一行时,该行中的数据显示在不同的Jframe。例如,在 jtable 中,我有第 1、2、3、4、5、6 行,用户已过滤,结果是第 2 行和第 5 行,当我单击“2”行时,它将从未过滤的原始行 1 中复制数据表

代码的第一部分是从文本字段中过滤我的 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);

}     

解决方法

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();

当表被过滤(或排序)时,模型中的数据不会改变,只有视图中的数据被过滤(或排序)。

因此需要将视图中当前选中的行映射到模型中的行:

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();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。