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, indocumentlistener
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
Post a Comment