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