В ячейке таблицы может содержаться не просто текст, а какие то сложные компоненты, например комбобокс, кнопка, текстовое поле или даже панелька (содержащая в себе текстовые поля и кнопки сразу). Чтобы при изменении ширину таблицы содержимое ячейки изменялось соответственно и аккуратно вписывалось в ячейку, нужно добавить к таблицы listener на событие изменения ширины столбцов и при изменении ширины столбцов соответственным образом изменять ширину содержимого ячейки.
// Создаем store для хранения моделей,
// каждая модель - это строка в таблице
ListStore store = new ListStore<ModelData>();
// создаем лист конфигов, каждый конфиг является столбцом таблицы
List configs = new ArrayList<ColumnConfig>();
// Создаем столбцы таблицы и настраиваем их
ColumnConfig column = new ColumnConfig();
// заголовок столбца
column.setHeader("First column");
// id столбца
column.setId("firstColumn");
// ширина столбца
column.setWidth(120);
// рендерер столбца - отвечает за то
// как будет отображаться содержимое ячеек в этом столбце
column.setRenderer(getFirstColumnRenderer());
// добавляем конфиг столбца в лист
configs.add(column);
...
column.setHeader("Last column");
column.setId("lastColumn");
column.setWidth(120);
column.setRenderer(getLastColumnRenderer());
configs.add(column);
// создаем модель столбцов таблицы и
// передаем ей лист конфигов
ColumnModel cm = new ColumnModel(configs);
// создаем редактируемую таблицу на основе
// store моделей и модели столбцов
EditorGrid grid = new EditorGrid<ModelData>(store, cm);
// добавляем к таблице слушателя на события изменения размера
//столбца
grid.addListener(Events.ColumnResize, new Listener<GridEvent<ModelData>>() {
@Override
public void handleEvent(final GridEvent<ModelData> be) {
// идем по store, каждый элемент которого соответствует
// строке в таблице
for (int i = 0; i < be.getGrid()
.getStore().getCount(); i++) {
// в каждой ячейке нашей таблице может содержаться
//какой-то виджет и нам надо его получить
Widget widget =
be.getGrid().getView()
.getWidget(i, be.getColIndex());
// если это та ячейка в которой виджет содержится,
// а не простая ячейка то задаем этому виджету
// новую ширину равную новой ширине столбца
// и вычитаем 10 для того чтобы виджет аккуратно
// вписывался в ячейку
if ((widget != null) &&
(widget instanceof BoxComponent)) {
((BoxComponent) widget).setWidth(be.getWidth() - 10);
}
}
}
});
Комментариев нет:
Отправить комментарий