如何在Vaadin中创建可编辑的生成列?
我在Vaadin中有一个表,它有3个生成的列。但是,我希望其中一个是可编辑的。因此,该表有以下列:如何在Vaadin中创建可编辑的生成列?,vaadin,Vaadin,我在Vaadin中有一个表,它有3个生成的列。但是,我希望其中一个是可编辑的。因此,该表有以下列: table.addGeneratedColumn("name", new NameGeneratedColumn()); table.addGeneratedColumn("classification", new ClassificationGeneratedColumn()); table.addGeneratedColumn("variation", new VariationGenerat
table.addGeneratedColumn("name", new NameGeneratedColumn());
table.addGeneratedColumn("classification", new ClassificationGeneratedColumn());
table.addGeneratedColumn("variation", new VariationGeneratedColumn());
当我点击编辑按钮时,我想使分类
列可编辑。
在按钮内单击
方法,该方法接收我试图实现的ClickEvent
table.setTableFieldFactory(new TableFieldFactory() {
@Override
public Field createField(Container container, Object itemId, Object propertyId, Component uiContext)
TextField tx = new TextField();
tx.focus();
tx.setWidth("90%");
return tx;
}
});
并添加了表。setEditable(true)
,它不会影响任何内容,因为表上只有生成的列。
它甚至没有进入
createField
方法。据我所知,生成的列不会传递给字段工厂。
您可以添加一个具有“classification”id的普通字符串列,然后添加具有相同id的生成列。您甚至可能需要在设置表格可编辑时删除生成的列
像这样的方法应该会奏效:
final Table t = new Table();
t.addContainerProperty("classification", String.class, null);
final ColumnGenerator generator = new ColumnGenerator() {
@Override
public Object generateCell(Table source, Object itemId,
Object columnId) {
return "1";
}
};
t.addGeneratedColumn("classification", generator);
t.addItem();
t.addItem();
layout.addComponent(t);
Button button = new Button("editable", new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
t.setEditable(!t.isEditable());
if (t.isEditable())
t.removeGeneratedColumn("classification");
else
t.addGeneratedColumn("classification", generator);
}
});
layout.addComponent(button);
在
ColumnGenerator
的generateCell
方法中创建所需的可编辑组件。此方法在其参数中获取itemId
和propertyId
,因此您可以检查给定单元格是否处于可编辑状态。当然,您需要自己跟踪这种状态,只需在某处保留一个对象editemid
您需要调用表的refreshRowCache
方法才能使其工作
需要这样做的典型情况是更新生成器(例如CellStyleGenerator)并希望确保使用新样式重新绘制行
请注意,调用此方法并不便宜,因此请避免不必要地调用它