java - How to show/hide different row sections in a JTable -
i have jtable rows list files , folders in directory. folder rows have button hide , show rows listing files in folder. when application starts up, files rows come after folder row hidden. used rowfilter hide these rows after table created in subclass method:
... public void createtable(){ //create , populate table ... //add filter hide subfile rows tablerowsorter<defaulttablemodel> sorter = new tablerow sorter<defaulttablemodel>(tablemodel); rowfilter hidefilter = getrowfilter(); sorter.setrowfilter(hidefilter); mytable.setrowsorter(sorter); } ... private rowfilter getrowfilter() { rowfilter<defaulttablemodel, integer> filter = new rowfilter<defaulttablemodel, integer>() { @override public boolean include(rowfilter.entry<? extends defaulttablemodel, ? extends integer> entry) { int modelrow = entry.getidentifier(); if(/* current row column contains flag */){ //hide row represents file in folder return false; } else return true; } }; return filter; } this code hides rows, i'm wondering how show , re-hide of hidden rows. can done filter class 1 i've done? there way filter function called button , filter based on value found in column?
the basic idea need have filter class filters entries depending on value of fields (i created 1 field keep example simple), , filter has methods change value of fields.
then create button calls method when pressed, followed call table.getrowsorter().allrowschanged(), signals table data has changed has redraw itself.
here's working example.
public class test { public static class filter extends rowfilter<tablemodel, integer> { private string includeprefix = "foo"; @override public boolean include( javax.swing.rowfilter.entry<? extends tablemodel, ? extends integer> entry) { return entry.getstringvalue(0).startswith( includeprefix ); } // calling method changes filter allow different prefix public void swapprefix() { this.includeprefix = this.includeprefix.equals("foo") ? "bar" : "foo"; } } public static void main(string[] args) { //setup jframe frame = new jframe(); frame.setlayout( new boxlayout(frame.getcontentpane(), boxlayout.page_axis)); jtable table = new jtable( new object[][]{ new object[]{ "foo 1" }, new object[]{ "bar 1" }, new object[]{ "foo 2" }, new object[]{ "foo 3" }, new object[]{ "bar 2" }}, new object[] { "foo"}); //create , configure sorter filter filter = new filter(); tablerowsorter<tablemodel> sorter = new tablerowsorter<tablemodel>(table.getmodel()); sorter.setrowfilter(filter); table.setrowsorter(sorter); jbutton changefilter = new jbutton( "change filter"); // pressing button changes filter first, tells table sorter update display changefilter.addactionlistener( e -> { filter.swapprefix(); table.getrowsorter().allrowschanged(); }); //display window frame.add( table ); frame.add(changefilter); frame.pack(); frame.setvisible( true ); } }
Comments
Post a Comment