Java Vaadin-动态生成表
我有一份瓦丁申请表。它的一个组成部分是一个表。我需要一个可能性,以添加尽可能多的列,用户想要的(嗯,让我们说,目前最多20)到该表。开始时,有5列,因此实际上用户可以添加第6-20列。 但是,在执行“layout.addComponent(…)”之后,此表将不再可编辑 我尝试了两件事:Java Vaadin-动态生成表,java,user-interface,vaadin,Java,User Interface,Vaadin,我有一份瓦丁申请表。它的一个组成部分是一个表。我需要一个可能性,以添加尽可能多的列,用户想要的(嗯,让我们说,目前最多20)到该表。开始时,有5列,因此实际上用户可以添加第6-20列。 但是,在执行“layout.addComponent(…)”之后,此表将不再可编辑 我尝试了两件事: 有一个存储当前行数的变量,每次单击“添加”按钮,该变量将增加1。每次单击,都会向表中添加一列 另一个想法是保存变量中的列数(如idea 1)和集合中某个位置的单元格值(无论什么)。单击“添加”按钮后,整个表被删除
有什么建议吗 我认为在链接到
表的容器上调用addContainerProperty
就足够了。这样做应该会向表触发一个PropertySetChangeEvent
当然,除非您使用Table.setVisibleColumns
限制了可见列
如果这对您没有帮助,一段代码可以帮助您解决问题。如果MyContainer扩展IndexedContainer,您就有了完全的自由;作为一个示例,我的统计数据在ZooKeeper中被简单地(动态)序列化,MyContainer监听ZooKeeper的更改:
public class MyContainer extends IndexedContainer {
...
public void process(final ModelChangeEvent event) {
...
for (Map.Entry<String, Long> entry : newTask.getCounters().entrySet()) {
addContainerProperty(entry.getKey(), Long.class, 0L);
Property property = getContainerProperty(taskName, entry.getKey());
property.setValue(entry.getValue());
}
fireContainerPropertySetChange();
...
}
公共类MyContainer扩展IndexedContainer{
...
公共作废流程(最终ModelChangeEvent事件){
...
对于(Map.Entry:newTask.getCounters().entrySet()){
addContainerProperty(entry.getKey(),Long.class,0L);
Property=getContainerProperty(taskName,entry.getKey());
property.setValue(entry.getValue());
}
fireContainerPropertySetChange();
...
}
当我们向映射添加新的(键,值)对时,我们将自动获得新列,其中“键”是列标题,“值”是单元格值。无需调用“fire”;它将由IndexedContainer实现自动调用(检查源代码)