diff --git a/swingbits/src/main/java/org/oxbow/swingbits/table/filter/AbstractTableFilter.java b/swingbits/src/main/java/org/oxbow/swingbits/table/filter/AbstractTableFilter.java index 9a80c68..2793aa1 100644 --- a/swingbits/src/main/java/org/oxbow/swingbits/table/filter/AbstractTableFilter.java +++ b/swingbits/src/main/java/org/oxbow/swingbits/table/filter/AbstractTableFilter.java @@ -59,6 +59,7 @@ public abstract class AbstractTableFilter implements ITableFil private final T table; private final TableFilterState filterState = new TableFilterState(); + private boolean autoclean; public AbstractTableFilter( T table ) { this.table = table; @@ -88,6 +89,9 @@ private void listenForDataChange(TableModel model) { @Override public void tableChanged(TableModelEvent e) { clearDistinctItemCache(); + if (autoclean && table.getModel().getRowCount() == 0) { + clear(); + } } }); } @@ -169,6 +173,11 @@ public boolean includeRow( ITableFilter.Row row ) { public void setFilterState(int column, Collection values ) { filterState.setValues(column, values); } + + @Override + public void setAutoClean(boolean autoclean) { + this.autoclean = autoclean; + } public void clear() { filterState.clear(); diff --git a/swingbits/src/main/java/org/oxbow/swingbits/table/filter/ITableFilter.java b/swingbits/src/main/java/org/oxbow/swingbits/table/filter/ITableFilter.java index cc5c5e4..7ecee12 100644 --- a/swingbits/src/main/java/org/oxbow/swingbits/table/filter/ITableFilter.java +++ b/swingbits/src/main/java/org/oxbow/swingbits/table/filter/ITableFilter.java @@ -85,6 +85,12 @@ public interface Row { void addChangeListener( IFilterChangeListener listener ); void removeChangeListener( IFilterChangeListener listener ); + /** + * Set flag to clear all columns filter if model row count is 0 + * @param autoclean + */ + void setAutoClean(boolean autoclean); + /** * Clear the filter */ diff --git a/swingbits/src/main/java/org/oxbow/swingbits/table/filter/TableRowFilterSupport.java b/swingbits/src/main/java/org/oxbow/swingbits/table/filter/TableRowFilterSupport.java index f21008e..05ec9b4 100644 --- a/swingbits/src/main/java/org/oxbow/swingbits/table/filter/TableRowFilterSupport.java +++ b/swingbits/src/main/java/org/oxbow/swingbits/table/filter/TableRowFilterSupport.java @@ -58,6 +58,7 @@ public final class TableRowFilterSupport { private int filterIconPlacement = SwingConstants.LEADING; private boolean useTableRenderers = false; private ListCellRenderer renderer = null; + private boolean autoclean = false; private TableRowFilterSupport( ITableFilter filter ) { if ( filter == null ) throw new NullPointerException(); @@ -111,6 +112,16 @@ public TableRowFilterSupport searchable( boolean searchable ) { this.searchable = searchable; return this; } + + /** + * Set flag to clear all filters automatically if model row count is 0 + * @param autoclean + * @return + */ + public TableRowFilterSupport autoclean( boolean autoclean ) { + this.autoclean = autoclean; + return this; + } public TableRowFilterSupport searchFilter(IListFilter searchFilter) { this.searchFilter = searchFilter; @@ -153,7 +164,9 @@ public JTable apply() { filterPopup.setCellRenderer(renderer); setupTableHeader(); - + + filter.setAutoClean(autoclean); + return filter.getTable(); } diff --git a/swingbits/src/test/java/org/oxbow/swingbits/table/filter/TableFilterTest.java b/swingbits/src/test/java/org/oxbow/swingbits/table/filter/TableFilterTest.java index d12b2cd..f5347d0 100644 --- a/swingbits/src/test/java/org/oxbow/swingbits/table/filter/TableFilterTest.java +++ b/swingbits/src/test/java/org/oxbow/swingbits/table/filter/TableFilterTest.java @@ -87,6 +87,15 @@ public void actionPerformed(ActionEvent e) { } }); + toolbar.add( new AbstractAction("Clear Table") { + + @Override + public void actionPerformed(ActionEvent e) { + DefaultTableModel modelo = (DefaultTableModel) table.getModel(); + modelo.setRowCount(0); + } + }); + f.pack(); f.setLocationRelativeTo(null); @@ -97,7 +106,8 @@ public void actionPerformed(ActionEvent e) { private TableRowFilterSupport filter; private JTable buildTable() { - filter = TableRowFilterSupport.forTable(new JTable()) + + filter = TableRowFilterSupport.forTable(new JTable(new DefaultTableModel(data, colNames))) .onFilterChange(new IFilterChangeListener() { @Override public void filterChanged(ITableFilter filter) { @@ -106,9 +116,11 @@ public void filterChanged(ITableFilter filter) { }) .actions(true) .searchable(true) - .useTableRenderers(true); + .useTableRenderers(true) + .autoclean(true); + JTable table = filter.apply(); - table.setModel( new DefaultTableModel(data, colNames) ); + table.getColumnModel().getColumn(0).setCellRenderer(new TestRenderer()); return table; }