java - Unable to lose jComboBox in a jTable focus -


i have jtable has jcombobox column. had issue couldn't jcombobox show unless first click on it. other people have had same problem, it seems.

so learned needed make cellrenderer besides celleditor. , did...

public class mycellrenderer extends jcombobox<customitem> implements tablecellrenderer{     @override     public component gettablecellrenderercomponent(jtable table, object value, boolean isselected, boolean hasfocus, int row, int column){         if(isselected){             setforeground(table.getselectionforeground());             super.setbackground(table.getselectionbackground());         } else{             setforeground(table.getforeground());             setbackground(table.getbackground());         }         setselecteditem(value);         return this;     } } 

by way, using comboboxrenderer because need display text while containing item.

public class mycomboboxrenderer extends basiccomboboxrenderer{     @override     public component getlistcellrenderercomponent(jlist list, object value, int index, boolean isselected, boolean cellhasfocus){         super.getlistcellrenderercomponent(list, value, index, isselected, cellhasfocus);         if(value != null){             customitem customitem = (customitem) value;             settext(customitem.gettext());         }         if(index == -1){             customitem customitem = (customitem) value;             settext("" + customitem.gettext());         }         return this;     } } 

and works! show jcombobox in jtable default but each jcombobox on each row has permanent focus! , first 1 click on displays menu. rest 'selected' not respond.

edit: here how create table.

private void initializetable(){     jtable jtable1 = new javax.swing.jtable();     defaulttablemodel dtm = new defaulttablemodel();     dtm.addcolumn("one");     dtm.addcolumn("two");     dtm.addcolumn("three");     jtable1.setmodel(dtm);      jcombobox<customitem> items = new jcombobox<>();     items.setrenderer(new mycomboboxrenderer());     items.add(new customitem(1, "soup", false);     items.add(new customitem(33, "sauce", false);     items.setselectedindex(0);      jtable1.getcolumnmodel().getcolumn(2).setcelleditor(new defaultcelleditor(items));     jtable1.getcolumnmodel().getcolumn(2).setcellrenderer(new mycellrenderer()); } 


Comments

Popular posts from this blog

c# - How Configure Devart dotConnect for SQLite Code First? -

java - Copying object fields -

c++ - Clear the memory after returning a vector in a function -