java - How to implement auto complete functionality in a cell in JTable? -


my jtable has cell editor implemented instance of defaultcelleditor(jcombobox) class. i've tried couple of different things (adding auto-completion support swing comboboxes ) still doesn't work.

1:

// jcombobox combo = new jcombobox(new object[] { "ester", "jordi", "jordina", "jorge", "sergi" }); autocompletedecorator.decorate(combo); defaultcelleditor celleditor = new defaultcelleditor(combo); tablecolumn column = mytable.getcolumnmodel().getcolumn(2); column.setcelleditor(celleditor); // 

2:

// object[] elements = new object[] { "ester", "jordi", "jordina", "jorge", "sergi" }; jcombobox c = new jcombobox(elements); c.seteditable(true); autocompletesupport support = autocompletesupport.install(c, glazedlists.eventlistof(elements)); support.setselectstextonfocusgain(false); support.sethidespopuponfocuslost(false); support.setstrict(false); comboboxcelleditor combo = new comboboxcelleditor(c); tablecolumn column = mytable.getcolumnmodel().getcolumn(2); combotablecellrenderer renderer = new combotablecellrenderer(); column.setcellrenderer(renderer); column.setcelleditor(combo); // 

3:

// object[] elements = new object[] { "ester", "jordi", "jordina", "jorge", "sergi" }; jcombobox combobox = new jcombobox(elements); combobox.seteditable(true); autocompletion ac = new autocompletion(combobox); ac.setstrict(false); defaultcelleditor celleditor = new defaultcelleditor(combobox); tablecolumn column = mytable.getcolumnmodel().getcolumn(2); column.setcelleditor(celleditor); // 

the problem facing user starts typing in combo box, comes out of editing mode, , preventing entering value.

no issue favorite autocomplete jcombobox / jtextfield, still there second choice use autocomplete jtextfield instead of autocomplete jcombobox,

enter image description here

enter image description here

added code oracle jtable tutorial

import javax.swing.defaultcelleditor; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.jscrollpane; import javax.swing.jtable; import javax.swing.table.abstracttablemodel; import javax.swing.table.defaulttablecellrenderer; import javax.swing.table.tablecellrenderer; import javax.swing.table.tablecolumn; import java.awt.component; import java.awt.dimension; import java.awt.gridlayout; import java.util.arraylist;  /**  * tablerenderdemo tabledemo, except  * explicitly initializes column sizes , uses combo box  * editor sport column.  */ public class tablerenderdemo extends jpanel {     private static final long serialversionuid = 1l;      private boolean debug = false;      public tablerenderdemo() {         super(new gridlayout(1, 0));         jtable table = new jtable(new mytablemodel());         table.setpreferredscrollableviewportsize(new dimension(500, 70));         table.setfillsviewportheight(true);         //create scroll pane , add table it.         jscrollpane scrollpane = new jscrollpane(table);         //set column sizes.         initcolumnsizes(table);         //fiddle sport column's cell editors/renderers.         setupsportcolumn(table, table.getcolumnmodel().getcolumn(2));         //add scroll pane panel.         add(scrollpane);     }      /*      * method picks column sizes.      * if column heads wider column's cells'      * contents, can use column.sizewidthtofit().      */     private void initcolumnsizes(jtable table) {         mytablemodel model = (mytablemodel) table.getmodel();         tablecolumn column = null;         component comp = null;         int headerwidth = 0;         int cellwidth = 0;         object[] longvalues = model.longvalues;         tablecellrenderer headerrenderer = table.gettableheader().getdefaultrenderer();         (int = 0; < 5; i++) {             column = table.getcolumnmodel().getcolumn(i);             comp = headerrenderer.gettablecellrenderercomponent(null, column.getheadervalue(), false, false, 0, 0);             headerwidth = comp.getpreferredsize().width;             comp = table.getdefaultrenderer(model.getcolumnclass(i)).gettablecellrenderercomponent(table, longvalues[i], false, false, 0, i);             cellwidth = comp.getpreferredsize().width;             if (debug) {                 system.out.println("initializing width of column " + + ". " + "headerwidth = " + headerwidth + "; cellwidth = " + cellwidth);             }             column.setpreferredwidth(math.max(headerwidth, cellwidth));         }     }      public void setupsportcolumn(jtable table, tablecolumn sportcolumn) {         //set editor sport cells.         arraylist<string> listsomestring = new arraylist<string>();                 listsomestring.add("snowboarding");         listsomestring.add("rowing");         listsomestring.add("knitting");         listsomestring.add("speed reading");         listsomestring.add("pool");         listsomestring.add("none of above");         java2sautocombobox combobox = new java2sautocombobox(listsomestring);         combobox.setdatalist(listsomestring);         combobox.setmaximumrowcount(3);         sportcolumn.setcelleditor(new defaultcelleditor(combobox));         //set tool tips sport cells.         defaulttablecellrenderer renderer = new defaulttablecellrenderer();         renderer.settooltiptext("click combo box");         sportcolumn.setcellrenderer(renderer);     }      class mytablemodel extends abstracttablemodel {          private static final long serialversionuid = 1l;         private string[] columnnames = {"first name", "last name", "sport", "# of years", "vegetarian"};         private object[][] data = {{"kathy", "smith", "snowboarding", new integer(5), false},             {"john", "doe", "rowing", new integer(3), true}, {"sue", "black", "knitting", new integer(2), false},             {"jane", "white", "speed reading", new integer(20), true}, {"joe", "brown", "pool", new integer(10), false}};         public final object[] longvalues = {"jane", "kathy", "none of above", new integer(20), boolean.true};          @override         public int getcolumncount() {             return columnnames.length;         }          @override         public int getrowcount() {             return data.length;         }          @override         public string getcolumnname(int col) {             return columnnames[col];         }          @override         public object getvalueat(int row, int col) {             return data[row][col];         }          /*          * jtable uses method determine default renderer/          * editor each cell.  if didn't implement method,          * last column contain text ("true"/"false"),          * rather check box.          */         @override         public class<?> getcolumnclass(int c) {             return getvalueat(0, c).getclass();         }          /*          * don't need implement method unless table's          * editable.          */         @override         public boolean iscelleditable(int row, int col) {             //note data/cell address constant,             //no matter cell appears onscreen.             if (col < 2) {                 return false;             } else {                 return true;             }         }          /*          * don't need implement method unless table's          * data can change.          */         @override         public void setvalueat(object value, int row, int col) {             if (debug) {                 system.out.println("setting value @ " + row + "," + col                         + " " + value                         + " (an instance of "                         + value.getclass() + ")");             }              data[row][col] = value;             firetablecellupdated(row, col);              if (debug) {                 system.out.println("new value of data:");                 printdebugdata();             }         }          private void printdebugdata() {             int numrows = getrowcount();             int numcols = getcolumncount();              (int = 0; < numrows; i++) {                 system.out.print("    row " + + ":");                 (int j = 0; j < numcols; j++) {                     system.out.print("  " + data[i][j]);                 }                 system.out.println();             }             system.out.println("--------------------------");         }     }      /**      * create gui , show it.  thread safety,      * method should invoked      * event-dispatching thread.      */     private static void createandshowgui() {         //create , set window.         jframe frame = new jframe("tablerenderdemo");         frame.setdefaultcloseoperation(jframe.exit_on_close);          //create , set content pane.         tablerenderdemo newcontentpane = new tablerenderdemo();         newcontentpane.setopaque(true); //content panes must opaque         frame.setcontentpane(newcontentpane);          //display window.         frame.pack();         frame.setvisible(true);     }      public static void main(string[] args) {         //schedule job event-dispatching thread:         //creating , showing application's gui.         javax.swing.swingutilities.invokelater(new runnable() {              @override             public void run() {                 createandshowgui();             }         });     } } 

Comments

Popular posts from this blog

java - Play! framework 2.0: How to display multiple image? -

gmail - Is there any documentation for read-only access to the Google Contacts API? -

php - Controller/JToolBar not working in Joomla 2.5 -