Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CellRenderer and Editor reset when adding new columns

Tags:

java

swing

I have a table where my columns expand dynamically. Initially I set my table model to have 5 columns since basic information has 5 columns. Among the 5 columns column 2 and 3 are buttons (actually they are hyperlinks in a form of a button) which means that I have set column 2 and 3 to have its own renderer and editor.

table.getColumnModel().getColumn(2).setCellRender(new MyCellRender());
table.getColumnModel().getColumn(2).setCellEditor(new MyCellEditor(table));
//more code for column 3 initializatation

My problem is there are times that a row might have more than 5 colums so I check it by adding new columns everytime I need to add more columns in the model. I use

model.addColumn("ColumnName");

to add new columns. The problem is everytime I add new rows that is greater then the initial row my renderers and editors on column 2 and 3 are reset/gone and are rendered as default. What do I need so that column 2 and column 3 remains. BTW Column 2 and 3 are the only columns that are always rendered as buttons.

like image 599
jamesv Avatar asked Oct 21 '25 21:10

jamesv


2 Answers

You can try to override createDefaultColumnsFromModel in JTable and set your special editors/renderers again. As you modify the model the JTable will re-create the columnModel if getAutoCreateColumnsFromModel is true. As you add new column I think you need this to remain true.

public void createDefaultColumnsFromModel() {
    super.createDefaultColumnsFromModel();
    getColumnModel().getColumn(2).setCellRender(new MyCellRender());
    getColumnModel().getColumn(2).setCellEditor(new MyCellEditor(this));
}
like image 78
Ashwinee K Jha Avatar answered Oct 23 '25 10:10

Ashwinee K Jha


To initially create the table you can use:

JTable table = new JTable(model);
table.setAutoCreateColumnsFromModel( false );
table.getColumnModel().getColumn(2).setCellRender(new MyCellRender());
table.getColumnModel().getColumn(2).setCellEditor(new MyCellEditor(table));

The TableColumnModel and TableColumns will be created automatically.

Now, if you want to add another column, because TableColumns are not automatically created from the model you won't lose your custom renderer/editor but now you need to create the TableColumns manually:

String columnName = "Column X";
model.addColumn( columnName );

//  AutoCreate is turned off so create table column here

TableColumn column = new TableColumn( table.getColumnCount() );
column.setHeaderValue( columnNamer );
table.addColumn( column );
like image 39
camickr Avatar answered Oct 23 '25 11:10

camickr



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!