Поиск по этому блогу

вторник, 20 ноября 2012 г.

Изменение ширины содержимого ячейки таблицы, если это содержимое является виджетом. GXT.


В ячейке таблицы может содержаться не просто текст, а какие то сложные компоненты, например комбобокс, кнопка, текстовое поле или даже панелька (содержащая в себе текстовые поля и кнопки сразу). Чтобы при изменении ширину таблицы содержимое ячейки изменялось соответственно и аккуратно вписывалось в ячейку, нужно добавить к таблицы 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);
          }
        }
      }
});

Комментариев нет:

Отправить комментарий