Подобно вашей проблемы: У меня есть таблица с двумя столбцами, но только один кнопку редактирования. Когда выбирается строка и нажимается кнопка редактирования, выбранная строка становится доступной для редактирования. Вот мой код, чтобы сделать таблицу для редактирования и как передать измененные значения в таблицу и обновить отредактированную строку:
private List<Field> fields = new ArrayList<>();
private final class EditTableClickListener implements ClickListener {
@Override
public void buttonClick(ClickEvent event) {
if (mappingTable.getSelection() != null) {
// change table menu when in Edit-Mode
editTableBar();
makeRowEditable();
}
}
private void makeRowEditable() {
mappingTable.setTableFieldFactory(new TableFieldFactory() {
@SuppressWarnings("rawtypes")
@Override
public Field<?> createField(Container container, Object itemId, Object propertyId, Component uiContext) {
if(itemId.equals(mappingTable.getSelection())) {
Field field = DefaultFieldFactory.get().createField(container, itemId, propertyId, uiContext);
field.setBuffered(true);
field.addAttachListener(new AttachListener() {
private static final long serialVersionUID = 1L;
@Override
public void attach(AttachEvent event) {
fields.add((Field)event.getConnector());
}
});
field.addDetachListener(new DetachListener() {
private static final long serialVersionUID = 1L;
@Override
public void detach(DetachEvent event) {
fields.remove((Field)event.getConnector());
}
});
return field;
}
return null;
}
});
mappingTable.setEditable(true);
}
}
// save when ENTER key is clicked in one of the TextFields
private final class SaveEditedRowShortcutListener extends ShortcutListener {
private SaveEditedRowShortcutListener(String caption, int keyCode, int[] modifierKeys) {
super(caption, KeyCode.ENTER, null);
}
@Override
public void handleAction(Object sender, Object target) {
for(Field field : fields) {
field.commit();
}
String key = fields.get(0).getValue().toString();
String value = fields.get(1).getValue().toString();
Object selection = mappingTable.getSelection();
selection.setKey(key);
selection.setValue(value);
mappingTable.setEditable(false);
mappingTable.updateItem(selection);
// change table menu back to Default-Mode
initialTableBar();
}
}
Здесь является [соответствующий поток на Vaadin форуме] (https: // Vaadin. com/old-forum/-/message_boards/view_message/1980390), который ссылается на [полезный пример обходного пути] (http://demo.vaadin.com/book-examples/book/1_221/) –
Спасибо, я проверю его –