【问题标题】:how to select and display right row from a filtered jtable?如何从过滤的 jtable 中选择并显示右行?
【发布时间】:2021-04-05 15:59:47
【问题描述】:

我的代码是用户在文本字段中输入他想要搜索的内容,并在 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);

}     

【问题讨论】:

    标签: java swing filter jframe jtable


    【解决方案1】:
    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();
    

    【讨论】:

      猜你喜欢
      • 2012-02-20
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多