java - Component for filtering a list -
what java swing component suitable creating filterable list seen below?
this type of filtering done using single column jtable
. table has inbuilt functionality add rowsorter
which:
..provides basis sorting and filtering.
see how use tables: sorting , filtering.
here example filtering font family names:
on left more 'list looking' component, while right hand side shows component table.
code
import java.awt.*; import javax.swing.*; import javax.swing.border.emptyborder; import javax.swing.event.*; import javax.swing.text.document; import javax.swing.table.tablerowsorter; public class fontfilter { private jcomponent ui = null; jtextfield filtertext; tablerowsorter sorter; fontfilter(boolean listlike) { initui(listlike); } public void initui(boolean listlike) { if (ui != null) { return; } ui = new jpanel(new borderlayout(4, 4)); ui.setborder(new emptyborder(4, 4, 4, 4)); graphicsenvironment ge = graphicsenvironment.getlocalgraphicsenvironment(); string[] fonts = ge.getavailablefontfamilynames(); string[][] tabledata = new string[fonts.length][1]; (int = 0; < fonts.length; i++) { tabledata[i][0] = fonts[i]; } string[] header = {"fonts"}; jtable table = new jtable(tabledata, header); if (listlike) { dimension d = table.getpreferredscrollableviewportsize(); table.setpreferredscrollableviewportsize(new dimension(d.width/2,d.height)); table.setshowgrid(false); table.settableheader(null); table.setfillsviewportheight(true); } ui.add(new jscrollpane(table)); sorter = new tablerowsorter(table.getmodel()); table.setrowsorter(sorter); filtertext = new jtextfield(10); ui.add(filtertext, borderlayout.page_start); document doc = filtertext.getdocument(); documentlistener listener = new documentlistener() { @override public void insertupdate(documentevent e) { newfilter(); } @override public void removeupdate(documentevent e) { newfilter(); } @override public void changedupdate(documentevent e) { newfilter(); } }; doc.adddocumentlistener(listener); } private void newfilter() { rowfilter rf = null; //if current expression doesn't parse, don't update. try { rf = rowfilter.regexfilter(filtertext.gettext(), 0); } catch (java.util.regex.patternsyntaxexception e) { return; } sorter.setrowfilter(rf); } public jcomponent getui() { return ui; } public static void main(string[] args) { runnable r = new runnable() { @override public void run() { try { uimanager.setlookandfeel(uimanager.getsystemlookandfeelclassname()); } catch (exception usedefault) { } fontfilter o1 = new fontfilter(true); fontfilter o2 = new fontfilter(false); jframe f = new jframe("font filter"); f.setdefaultcloseoperation(jframe.dispose_on_close); f.setlocationbyplatform(true); f.add(o1.getui(), borderlayout.line_start); f.add(o2.getui(), borderlayout.center); f.pack(); f.setminimumsize(f.getsize()); f.setvisible(true); } }; swingutilities.invokelater(r); } }
Comments
Post a Comment