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