JTable RowFilter export wyfiltrowanych danych.

0

Mam problme z exportem danych z wyfiltrowanej JTable do Excela (RowFilter), nie wiem dlaczego zle zawsze eksportowan są dane z pominięciem filtra. Przykładowo mam 4 wiersze w tablei, i zakładam filtr, reguły filtra spełniają tylko 2 wiersze i te dwa się wyświetlają w tabeil. Chciałbym teraz wyexportować te zafiltrowaną zawartość tabeli, jednak zawsze wypluwa mi wszystkie rekordy z pominięciem filtra.

Filtrowanie:

public static void filterContent(ArrayList<RowFilter<Object, Object>> andFilters, JTable table, TableRowSorter<TableModel> sorter, JLabel recordsCounter,
                                 ArrayList<Object>  fieldList)
{
    try {
        andFilters.clear();
        table.setRowSorter(null);      
        
        for(int i=0; i<fieldList.size();i++){    

            if(fieldList.get(i) instanceof JTextField) {RowFilter<Object,Object> filtr = RowFilter.regexFilter("(?i)" + ((JTextField) fieldList.get(i)).getText(),i);
                                                        andFilters.add(filtr);}
            if(fieldList.get(i) instanceof JCheckBox) {                                                       
                                                        RowFilter<Object,Object> filtr = RowFilter.regexFilter("(?i)" + ((JCheckBox) fieldList.get(i)).isSelected(),i);
                                                        andFilters.add(filtr);}
        }

        sorter.setRowFilter(RowFilter.andFilter(andFilters));
        table.setRowSorter(sorter);
        recordsCounter.setText(String.valueOf(table.getRowCount()));
        }
   catch (PatternSyntaxException pse) {System.err.println("Błąd filtrowania!");}
}

Export to excela, jak widać niżej exportuje dane z modelu. Myślałem że wypluje mi wyfiltrowane dane ale chyba czegoś nie rozumiem.

 public static void ToExcel(JTable table) throws FileNotFoundException, IOException{
        
    FileOutputStream fos = getSciezkaDoZapisu();    
   
    Workbook wb = new XSSFWorkbook();    
    Sheet sh = wb.createSheet("Arkusz1");
    
     for (int k = 0; k < table.getModel().getColumnCount()-1; k++) {
         Row row = sh.createRow((short)k);
         for (int i = 0; i <= table.getModel().getRowCount(); i++) {
           Cell cell = row.createCell((short)i);
           cell.setCellValue(table.getModel().getValueAt(k, i).toString());
        }
     }
    wb.write(fos);
    fos.close();
 }

Wywolanie filtrowania i eksportu:

andFilters = new ArrayList<RowFilter<Object, Object>>();
sorter = new TableRowSorter<TableModel>(new javax.swing.table.DefaultTableModel(tableData,tableHeaders));    
table.setRowSorter(sorter);  
Filters.setCellEditors(filtrTable, table, andFilters, sorter, table.getColumnCount(), liczbaRekordow);

Export.ToExcel(table);
0

Jakoś sobie poradziłem, może ktoś będzie miał podobny problem:

Rozwiązanie:

for(int k = 0; k < table.getRowCount();k++) {
         Row row = sh.createRow((short)k);    
              for(int i = 0; i<table.getColumnCount(); i++){
                  Cell cell = row.createCell((short)i);
                  cell.setCellValue(String.valueOf(**table.getModel().getValueAt(table.convertRowIndexToModel(k), i)));**
                    }
                }

1 użytkowników online, w tym zalogowanych: 0, gości: 1