Come posso creare un TableRowShorter tra due date
combobox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent arg0) {
if(arg0.getStateChange()==ItemEvent.SELECTED) {
if(!combobox.getSelectedItem().toString().equals(items[0])) { //items[] for the items of the combobox.
DefaultTableModel table1 = (DefaultTableModel)table.getModel();
String search =combobox.getSelectedItem().toString();
TableRowSorter<DefaultTableModel> tr = new TableRowSorter<DefaultTableModel>(table1);
table.setRowSorter(tr);
tr.setRowFilter(RowFilter.regexFilter(search));
}
}
}
});
Uso questo codice. Quando seleziono un elemento della casella combinata, ordina la tabella con l'elemento selezionato. Ho una seconda casella combinata. Diciamo che il nome della casella combinata è casella combinata2 e l'elemento di casella combinata2 è "Ultimi 2 mesi".
La prima colonna della tabella è per le date. Quando seleziono l'elemento di combobox2 (Ultimi 2 mesi), voglio ordinare la tabella. Voglio solo vedere le righe con un massimo di 2 mesi.
Ad esempio, se ho inviato la stringa ("01/01/2020"), voglio solo vedere le righe con ("01/01/2020") e dopo questa data.
Ma con questo codice posso vedere solo la data che invio. Spero di averlo spiegato bene. Posso condividere più codice se ne avete bisogno.
Risposte
Ad esempio, se ho inviato la stringa ("01/01/2020"), voglio solo vedere le righe con ("01/01/2020") e dopo questa data.
È necessario utilizzare un "filtro data".
Ad esempio, questo filtro restituirà tutte le date dopo una data specifica:
RowFilter.dateFilter(ComparisonType.AFTER, new Date());
Leggi l' RowFilter
API per altri filtri che puoi utilizzare.
Nota:
NON si dovrebbero memorizzare valori di stringa nel modello. È necessario memorizzare la data in un oggetto che rappresenta una data e quindi utilizzare un renderer personalizzato per formattare la data. Ciò consentirà al filtro dall'alto di funzionare correttamente.