java - JTable filter on DocumentListener not working -


  //registration filter     final tablerowsorter<tablemodel> sorter = new tablerowsorter<tablemodel>(databasemodel);     documentlistener idlistener = new documentlistener() {          public void changedupdate(documentevent documentevent) {          }         public void insertupdate(documentevent documentevent) {             string searchtext = txtreg.gettext();             if (searchtext.length() == 0) {               sorter.setrowfilter(null);             } else {               sorter.setrowfilter(rowfilter.regexfilter(searchtext));             }             numberofrecords.settext(searchtable.getrowcount() + " records");         }         public void removeupdate(documentevent documentevent) {              }       };    txtreg.getdocument().adddocumentlistener(idlistener); 

i'm here again silly questions... :( have jtable wish filter out type on textfield. after researching bit came this, doesn´t work! if put filter outside listener arbitrary string search term works perfectly. missing? thank you!

public class gui extends jframe { private static final long serialversionuid = -7968397937566078184l; private static final jlabel numberofrecords = new jlabel(); private static int numberofrows; private static defaulttablemodel databasemodel;    public gui(defaulttablemodel database){     setdefaultlookandfeeldecorated(true);     setlayout(new miglayout());     databasemodel = database;     //menus     jmenubar menubar = new jmenubar();     jmenu file = new jmenu("file");     jmenuitem update = new jmenuitem("look database updates");     jmenuitem settings = new jmenuitem("settings");     jmenuitem exit = new jmenuitem("exit");     menubar.add(file);     file.add(update);     file.add(settings);     file.add(exit);     setjmenubar(menubar);      //top section     jpanel searchsection = new jpanel();     searchsection.setlayout(new miglayout("w 50mm!"));     final jtextfield txtreg = new jtextfield(10);     jlabel searchid = new jlabel("current registration:");     jlabel lblmanufacturer = new jlabel("manufacturer");     jcombobox cmbmanufacturer = new jcombobox();     jlabel lbltype = new jlabel("type");     jcombobox cmbtype = new jcombobox();     //build main window     searchsection.add(searchid);     searchsection.add(txtreg, "span 2");     searchsection.add(lblmanufacturer);     searchsection.add(cmbmanufacturer, "growx, span 2");     searchsection.add(lbltype);     searchsection.add(cmbtype,"growx, span 2");     //table     final jtable searchtable = new jtable(databasemodel);     //pack table, still have figure 1 out     int width = 0;      (int row = 0; row < searchtable.getrowcount(); row++) {          tablecellrenderer renderer = searchtable.getcellrenderer(row, 2);          component comp = searchtable.preparerenderer(renderer, row, 2);          width = math.max (comp.getpreferredsize().width, width);      }      searchtable.getcolumn("key").setmaxwidth(0);     searchtable.getcolumn("key").setminwidth(0);     searchtable.setrowselectionallowed(true);     searchtable.setselectionmode(listselectionmodel.single_selection);     searchtable.setautocreaterowsorter(true);     searchtable.getrowsorter().togglesortorder(1);     searchtable.setautoresizemode(jtable.auto_resize_all_columns);     numberofrows=searchtable.getrowcount();     jscrollpane browsersp = new jscrollpane(searchtable);     browsersp.setborder(borderfactory.createemptyborder(0, 4, 4, 4));     settitle("airbase");     setsize(1300,700);     setminimumsize(new dimension(1250,650));     setextendedstate(jframe.maximized_both);     setlocationrelativeto(null);     setdefaultcloseoperation(exit_on_close);      //todo fill manufacturer box      //registration filter     //todo fix this!     final tablerowsorter<tablemodel> sorter = new tablerowsorter<tablemodel>(databasemodel);     documentlistener idlistener = new documentlistener() {          public void changedupdate(documentevent documentevent) {          }         public void insertupdate(documentevent documentevent) {             string searchtext = txtreg.gettext();             if (searchtext.length() == 0) {               sorter.setrowfilter(null);             } else {               sorter.setrowfilter(rowfilter.regexfilter(searchtext));             }             numberofrecords.settext(searchtable.getrowcount() + " records");         }         public void removeupdate(documentevent documentevent) {              }       };    txtreg.getdocument().adddocumentlistener(idlistener);     add(searchsection, "w 100%, h 5%, wrap");     add(browsersp,"w 100%, h 95%, wrap");     numberofrecords.setfont(numberofrecords.getfont().derivefont(9.0f));     numberofrecords.settext(numberofrows + " records");     add(numberofrecords, "alignx center"); }    } 

so ended getting started. looks simple mistake. forgot setrowsorter table.

searchtable.setrowsorter(sorter); 

added code works me. should work two, give have valid tablemodel passed gui. made dummy one.

notes:

  • you'll want add filter code removeupdate also, in documentlistener when text backspace'd, still filter.

  • this searchtable.getcolumn("key").setmaxwidth(0); makes row data not visible. want?

  • if want filter filter without case-sensitivity, can use this

    sorter.setrowfilter(rowfilter.regexfilter("(?i)" + searchtext)); 

    the "(?i)" case-insentive regex "flag"


Comments

Popular posts from this blog

Android layout hidden on keyboard show -

google app engine - 403 Forbidden POST - Flask WTForms -

c - Why would PK11_GenerateRandom() return an error -8023? -