Java Swing:过滤数据后选择Jtable的特定行

时间:2018-07-04 13:09:51

标签: java swing jtable

任务是过滤jTable中的数据并传递选定的值。问题是,在过滤jTable中的数据之后,它会输出旧值,该值位于过滤前的那个位置。

假设我有一个只有一列的表,值是1,2,3,4,5,6。过滤后,jTable中只有一个值,即6。因此,它应该输出6,但输出为1。因为过滤前表中存在1。在下面的代码中,第一个函数根据文本字段中提供的文本过滤表。第二功能输出选择值。如何更新jTable,因此它根据过滤数据而不是原始表为我提供输出。谢谢。

private void jTextField_searchRecordKeyReleased(java.awt.event.KeyEvent evt) {                                                    

        DefaultTableModel table=(DefaultTableModel)this.jTable_Search.getModel();
        String query=this.jTextField_searchRecord.getText();

        TableRowSorter<DefaultTableModel> tr=new TableRowSorter<DefaultTableModel>(table);
        jTable_Search.setRowSorter(tr);
        tr.setRowFilter(RowFilter.regexFilter("(?i)" + query));
    }                                                   

    private void jButton_LocateMouseClicked(java.awt.event.MouseEvent evt) {                                            
       int column = 0;
       int rows[]=this.jTable_Search.getSelectedRows();

       for(int i=0;i<rows.length;i++)
       {
           String value = jTable_Search.getModel().getValueAt(rows[i], column).toString();
           System.out.println(value);
       }       
    }             

1 个答案:

答案 0 :(得分:2)

表和模型中的选择索引是两个不同的东西。但是您可以将一个转换为另一个。 JTable API有一些转换方法。对于您而言,方法convertRowIndexToModel很重要。因此您的代码应如下所示:

private void jButton_LocateMouseClicked(java.awt.event.MouseEvent evt) {                                            
   int column = 0;
   int rows[]=this.jTable_Search.getSelectedRows();

   for(int i=0;i<rows.length;i++)
   {
       int modelRow = jTable_Search.convertRowIndexToModel(rows[i]);
       String value = jTable_Search.getModel().getValueAt(modelRow, column).toString();
       System.out.println(value);
   }       
}   

另一种可能性是使用表的方法getValueAt

private void jButton_LocateMouseClicked(java.awt.event.MouseEvent evt) {                                            
   int column = 0;
   int rows[]=this.jTable_Search.getSelectedRows();

   for(int i=0;i<rows.length;i++)
   {
       String value = jTable_Search.getValueAt(rows[i], column).toString();
       System.out.println(value);
   }       
}