Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Vaadin-动态生成表_Java_User Interface_Vaadin - Fatal编程技术网

Java Vaadin-动态生成表

Java Vaadin-动态生成表,java,user-interface,vaadin,Java,User Interface,Vaadin,我有一份瓦丁申请表。它的一个组成部分是一个表。我需要一个可能性,以添加尽可能多的列,用户想要的(嗯,让我们说,目前最多20)到该表。开始时,有5列,因此实际上用户可以添加第6-20列。 但是,在执行“layout.addComponent(…)”之后,此表将不再可编辑 我尝试了两件事: 有一个存储当前行数的变量,每次单击“添加”按钮,该变量将增加1。每次单击,都会向表中添加一列 另一个想法是保存变量中的列数(如idea 1)和集合中某个位置的单元格值(无论什么)。单击“添加”按钮后,整个表被删除

我有一份瓦丁申请表。它的一个组成部分是一个表。我需要一个可能性,以添加尽可能多的列,用户想要的(嗯,让我们说,目前最多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实现自动调用(检查源代码)