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:

enter image description here

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

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -