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

Java Swing:过滤数据后选择Jtable的specefic行,java,swing,jtable,Java,Swing,Jtable,任务是过滤jTable中的数据并传递选定的值。这个问题是,在对jTable中的数据进行过滤后,它会输出过滤前位于该位置的旧值 假设我有一个表有一列,值是1,2,3,4,5,6。过滤后,我在jTable中只得到一个值,比如说,6。所以,它应该输出6,但输出是1。在筛选之前,表中有1。在下面的代码中,第一个函数根据textfield中提供的文本过滤表。第二个函数输出选定值。如何更新jTable,因此它在过滤数据的基础上而不是在原始表的基础上提供输出。多谢各位 private void jTextFi

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

假设我有一个表有一列,值是1,2,3,4,5,6。过滤后,我在jTable中只得到一个值,比如说,6。所以,它应该输出6,但输出是1。在筛选之前,表中有1。在下面的代码中,第一个函数根据textfield中提供的文本过滤表。第二个函数输出选定值。如何更新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);
       }       
    }             
private void jTextField_searchRecordKeyReleased(java.awt.event.KeyEvent evt){
DefaultTableModel table=(DefaultTableModel)this.jTable_Search.getModel();
String query=this.jTextField_searchRecord.getText();
TableRowSorter tr=新的TableRowSorter(表格);
jTable_Search.setRowSorter(tr);
tr.setRowFilter(RowFilter.regexFilter(“(?i)”+query));
}                                                   
私有void jButton_LocateMouseClicked(java.awt.event.MouseEvent evt){
int列=0;
int rows[]=this.jTable_Search.getSelectedRows();

对于(int i=0;i表中的选择索引和模型中的选择索引是两种不同的东西。但是您可以将它们转换为另一种。
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);
   }       
}   

@约翰很高兴帮助你。我添加了另一个解决方案;)。是的,第二个是最简单的。我在阅读模型和表之间的差异时发现:要显示JTable,请创建一个JTable并为其设置相应的表模型。任何时候,如果我们想更改该表中的数据,请更改模型中的数据,然后更改将反映在视图中。@john这是正确的,但方法
JTable.getValueAt
JTable.setValueAt
也可用于简化代码。已确认,谢谢。如何将所选值添加到另一个JTable??
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);
   }       
}