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

Popular posts from this blog

yii2 - Yii 2 Running a Cron in the basic template -

asp.net - 'System.Web.HttpContext' does not contain a definition for 'GetOwinContext' Mystery -

javascript - Passport with Express 4 -