CellRenderer и редактор сбрасываются при добавлении новых столбцов - PullRequest
3 голосов
/ 28 ноября 2011

У меня есть таблица, в которой столбцы динамически расширяются.Первоначально я установил в своей табличной модели 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

MyПроблема в том, что иногда в строке может быть более 5 столбцов, поэтому я проверяю ее, добавляя новые столбцы каждый раз, когда мне нужно добавить больше столбцов в модель.Я использую

model.addColumn("ColumnName");

для добавления новых столбцов.Проблема в том, что каждый раз, когда я добавляю новые строки, которые больше исходной строки, мои средства визуализации и редакторы в столбцах 2 и 3 сбрасываются / исчезают и отображаются по умолчанию.Что мне нужно, чтобы столбец 2 и столбец 3 остались.Кстати, столбцы 2 и 3 - единственные столбцы, которые всегда отображаются в виде кнопок.

Ответы [ 2 ]

4 голосов
/ 28 ноября 2011

Вы можете попытаться переопределить createDefaultColumnsFromModel в JTable и снова установить специальные редакторы / средства визуализации. По мере изменения модели JTable будет заново создавать columnModel, если getAutoCreateColumnsFromModel имеет значение true. Когда вы добавляете новый столбец, я думаю, вам нужно, чтобы это оставалось правдой.

public void createDefaultColumnsFromModel() {
    super.createDefaultColumnsFromModel();
    getColumnModel().getColumn(2).setCellRender(new MyCellRender());
    getColumnModel().getColumn(2).setCellEditor(new MyCellEditor(this));
}
3 голосов
/ 28 ноября 2011

Для первоначального создания таблицы вы можете использовать:

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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...