java - JTable column uneditable after adding JComboBox to a cell -


i have jtable component 2 columns, second column iwant add jcombobox 1 cell, following oracle documentation i've created own cell editor, , added jcombobox after of other cells column became uneditable. here example:

before adding jcombobox:

after adding jcombobox, not edit other cells

after adding jcombobox:

my code:

defaulttablemodel model = new defaulttablemodel(textostabela, stubcolumnnames); tabela.setmodel(model); tabela.setborder(new lineborder(color.black)); tabela.setgridcolor(color.black); tabela.setshowgrid(true); tabela.setpreferredsize(new dimension(290, 132)); tabela.setrowheight(22); tabela.getcolumnmodel().getcolumn(0).setpreferredwidth(160); tabela.setautoresizemode(jtable.auto_resize_all_columns); tablecolumn tm = tabela.getcolumnmodel().getcolumn(0); tm.setcellrenderer(new colorcolumnrenderer(color.lightgray)); tablecolumn combocol1 = tabela.getcolumnmodel().getcolumn(1); jcombobox combobox = new jcombobox(valorescombobox); combobox.setselectedindex(0); combocol1.setcelleditor(new comboboxeditor(1,3,combobox)); 

celleditor code:

public class comboboxeditor extends defaultcelleditor {      private string[] values;     private string selectedvalue;     private int column = -1;     private int row = -1;      public comboboxeditor(jcombobox values) {         super(values);         // todo auto-generated constructor stub     }      public comboboxeditor(int column, int row, jcombobox values) {         super(values);         this.column = column;         this.row = row;      }      @override     public component gettablecelleditorcomponent(jtable table, object value,             boolean isselected, int row, int column) {         // todo auto-generated method stub         component c = table.geteditorcomponent();         if(column == this.column && row == this.row) {             return super.gettablecelleditorcomponent(table, value, isselected, row, column);         }          return null;     } } 

here example returns different combobo box row. if there no combo box row default editor used:

import java.awt.*; import java.util.list; import java.util.arraylist; import javax.swing.*; import javax.swing.border.*; import javax.swing.table.*;  public class tablecomboboxbyrow extends jpanel {     list<string[]> editordata = new arraylist<string[]>(3);      public tablecomboboxbyrow()     {         setlayout( new borderlayout() );          // create editordata used each row          editordata.add( new string[]{ "red", "blue", "green" } );         editordata.add( new string[]{ "circle", "square", "triangle" } );         editordata.add( new string[]{ "apple", "orange", "banana" } );          //  create table default data          object[][] data =         {             {"color", "red"},             {"shape", "square"},             {"fruit", "banana"},             {"plain", "text"}         };         string[] columnnames = {"type","value"};          defaulttablemodel model = new defaulttablemodel(data, columnnames);         jtable table = new jtable(model)         {             //  determine editor used row             public tablecelleditor getcelleditor(int row, int column)             {                 int modelcolumn = convertcolumnindextomodel( column );                  if (modelcolumn == 1 && row < 3)                 {                     jcombobox<string> combobox1 = new jcombobox<string>( editordata.get(row));                     return new defaultcelleditor( combobox1 );                 }                 else                     return super.getcelleditor(row, column);             }         };          jscrollpane scrollpane = new jscrollpane( table );         add( scrollpane ); //      table.getcolumnmodel().getcolumn(1).setcellrenderer(new comboboxrenderer2() );     }     private static void createandshowui()     {         jframe frame = new jframe("table combo box row");         frame.setdefaultcloseoperation(jframe.exit_on_close);         frame.add( new tablecomboboxbyrow() );         frame.setsize(200, 200);         frame.setlocationbyplatform( true );         frame.setvisible( true );     }      public static void main(string[] args)     {         eventqueue.invokelater(new runnable()         {             public void run()             {                 createandshowui();             }         });     } } 

the key overriding getcelleditor(...) method instead of creating custom renderer.


Comments

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -