【问题标题】:How to add a table to the layout如何在布局中添加表格
【发布时间】:2016-07-13 10:47:15
【问题描述】:

我在自己的类 FileUploaderResultsTable.java 中创建了一个表,如下所示:

public class FileUploaderResultsTable extends Table
{

    public FileUploaderResultsTable()
    {

        Table resultTable = new Table("Rendering table");
        resultTable.addStyleName("testTable2");
        resultTable.addContainerProperty("Name", String.class, null);
        resultTable.addContainerProperty("Mag",  Float.class, null);

        resultTable.addItem(new Object[]{"Canopus",        -0.72f}, 2);
        resultTable.addItem(new Object[]{"Arcturus",       -0.04f}, 3);
        resultTable.addItem(new Object[]{"Alpha Centauri", -0.01f}, 4);

        resultTable.setPageLength(resultTable.size());
        System.out.println("table created");
    }

我有另一个类 FileUploaderComponent.java,其中包括添加到 Window 对象的垂直布局。我正在尝试显示上表,因此在 FileUploaderComponent.java 中我创建了一个 FileUploaderResultsTable 对象,如下所示:

public class FileUploaderComponent extends AbstractJavaScriptComponent
{

    ...
    private VerticalLayout myLayout = new VerticalLayout();
    private FileUploaderResultsTable resultsTable = new FileUploaderResultsTable();
    ...
    public void addTable(){
    myLayout.addComponent(resultsTable);
    }

}

myLayout 然后被添加到另一个函数中的新窗口对象。该机制有效,因为我正在添加其他元素,如文本字段等,但由于某些原因,该表没有正确添加。 在 DOM 中,我可以看到有一个表,但它是空的,并且没有指定类名。 老实说,通常如果我想将另一个类中的组件添加到布局中,我通常会将组件称为resultsTable.resultTable,因此 object.component 语法而不仅仅是resultsTable,但编译器不喜欢那。那么,是否有另一种方法可以将表格作为组件添加到布局中,还是我只是在做一些愚蠢的事情?

【问题讨论】:

  • 我看到你在FileUploaderResultsTable 中扩展Table,然后在其中创建Table 的新副本。为什么 ?随着您的表格扩展Table,它已经具备所有功能。可能是当容器调用返回数据等的函数时,父Table 正在重新调整空白数据。似乎没有任何被覆盖的方法可以从您的内部副本中获取数据。换句话说,您可以删除班级中对 resultTable 的所有引用。
  • 我正在扩展 Table 因为我将不得不延迟加载一些行(这只是一个虚拟表,真正的表可能有数千行长)。所以,你是说如果我扩展表,我可以直接向它添加行而不创建表,因为扩展类 Table 已经创建了一个?
  • 阅读一些教程如何在 java 中使用扩展类。

标签: java vaadin vaadin7


【解决方案1】:

您以错误的方式使用扩展类。试试这个:

public class FileUploaderResultsTable extends Table
{

    public FileUploaderResultsTable()
    {
        setCaption("Rendering table");
        addStyleName("testTable2");
        addContainerProperty("Name", String.class, null);
        addContainerProperty("Mag",  Float.class, null);

        addItem(new Object[]{"Canopus",        -0.72f}, 2);
        addItem(new Object[]{"Arcturus",       -0.04f}, 3);
        addItem(new Object[]{"Alpha Centauri", -0.01f}, 4);

        setPageLength(resultTable.size());

        System.out.println("table created");
    }
}

【讨论】:

  • 是的,这行得通。好的,我想我会按照您的建议阅读一些扩展课程教程,因为显然我不知道自己在做什么。你能自己推荐一个好的教程,还是我应该在谷歌上找到一些?
  • 我想我会很快更新这个,因为我似乎遇到了一个奇怪的问题。因此,我按照您建议的@d2k2 的方式创建了表格,并且可以正常工作。该表位于另一个窗口中,某种弹出窗口,当我关闭它并再次打开它(有一个填充行的循环)时,表是空的。所以,本质上,它只在第一次工作:是因为表只创建一次,因为我使用的是扩展表的类?
  • 该表仅在对象创建时填写。我不知道你的代码是什么样子的,所以我不能帮你解决其他问题。
  • 我想我想通了,每次完成后我都需要“清理”表格,所以 Object.removeAllItems();,由于某些我无法理解的原因,似乎正在做这项工作。在我的表中,我动态创建行,然后在新窗口中显示该表,该窗口看起来像一个弹出窗口并有一个关闭按钮。当我关闭此窗口时,表格消失了,但似乎表格中的数据以某种方式阻止了新数据的加载......不知道
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
相关资源
最近更新 更多