Редактируем колонку таблицы

Ни для кого не секрет, что vaadin таблицу можно сделать редактируемой, если вызвать метод table.setEditable(true) и наоборот. В этом случае редактировать можно все ячейки.

Но что, если необходимо редактировать ячейки только одной колонки? Например так:

Форумы и «Book of Vaadin» подсказывают, что надо использовать TableFieldFactory. Например: https://vaadin.com/book/-/page/components.table.html, параграф «Navigation in Editable Mode».

Собственно, примерно так должен выглядеть код:

// создаем таблицу и определяем ее колонки
Table table = new Table();
table.addContainerProperty("num", Integer.class, null);
table.addContainerProperty("name", String.class, null);
table.addContainerProperty("age", String.class, null);

// переопределяя метод создания редактируемых полей, мы просто 
// указываем конкретную колонку или колонки, для которых надо 
// создавать эти самые поля
table.setTableFieldFactory(new TableFieldFactory() {
   @Override
   public Field createField(Container c, Object itemId, 
         Object propertyId, Component uiContext) {
      TextField field = null;

      if ("age".equals(propertyId)) {
         field = new TextField((String) propertyId);
         field.setWidth("100%");
      }

      return field;
   }
});

// а это позволит проверить работоспособность примера по 
// двойному нажатию мышки на табличке
table.addListener(new ItemClickEvent.ItemClickListener() {
   @Override
   public void itemClick(ItemClickEvent event) {
      if (event.isDoubleClick()) {
         table.setEditable(!table.isEditable());
      }
   }
});

// осталось заполнить таблицу данными и запустить приложение
int index = 1;
table.addItem(new Object[]{index, "Nathan Fielding", 41}, index++);
table.addItem(new Object[]{index, "John Smith", 26}, index++);
table.addItem(new Object[]{index, "Jane Hill", 88}, index++);
table.addItem(new Object[]{index, "John Sheridan", 32}, index++);
table.addItem(new Object[]{index, "Marc Torvalds", 40}, index++);
table.addItem(new Object[]{index, "Sarah Richards", 34}, index++);
table.addItem(new Object[]{index, "Peter Fielding", 85}, index++);
table.addItem(new Object[]{index, "Lenny Sheridan", 32}, index++);
table.addItem(new Object[]{index, "Lenny McGoff", 70}, index++);
table.addItem(new Object[]{index, "John Halas", 72}, index++);