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