我有一个表格,我的列动态扩展。最初我将我的表模型设置为5列,因为基本信息有5列。在5列中,第2列和第3列是按钮(实际上它们是按钮形式的超链接),这意味着我已将第2列和第3列设置为拥有自己的渲染器和编辑器。
table.getColumnModel().getColumn(2).setCellRender(new MyCellRender());
table.getColumnModel().getColumn(2).setCellEditor(new MyCellEditor(table));
//more code for column 3 initializatation
我的问题是有时候一行可能有超过5个列,所以我每次需要在模型中添加更多列时添加新列来检查它。我用
model.addColumn("ColumnName");
添加新列。问题是每次我添加的行都比初始行大,我的渲染器和第2列和第3列上的编辑器被重置/删除并呈现为默认值。我需要什么才能保留第2列和第3列。 BTW第2列和第3列是唯一始终呈现为按钮的列。
答案 0 :(得分:4)
您可以尝试覆盖JTable中的createDefaultColumnsFromModel并再次设置特殊的编辑器/渲染器。在修改模型时,如果getAutoCreateColumnsFromModel为true,JTable将重新创建columnModel。当您添加新列时,我认为您需要保持这一点。
public void createDefaultColumnsFromModel() {
super.createDefaultColumnsFromModel();
getColumnModel().getColumn(2).setCellRender(new MyCellRender());
getColumnModel().getColumn(2).setCellEditor(new MyCellEditor(this));
}
答案 1 :(得分:3)
要初步创建表格,您可以使用:
JTable table = new JTable(model);
table.setAutoCreateColumnsFromModel( false );
table.getColumnModel().getColumn(2).setCellRender(new MyCellRender());
table.getColumnModel().getColumn(2).setCellEditor(new MyCellEditor(table));
将自动创建TableColumnModel和TableColumns。
现在,如果您想添加另一列,因为TableColumns不是从模型自动创建的,您不会丢失自定义渲染器/编辑器,但现在需要手动创建TableColumns:
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 );