Я создал таблицу в своем классе 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
, но компилятору это не нравится. SO, есть ли другой способ добавить таблицу в качестве компонента в макет, или я просто делаю что-то глупое?
Я вижу, что вы расширяете 'Таблицу' в своей' FileUploaderResultsTable', а затем создаете в нем новую копию 'Table'. Зачем ? Поскольку ваша таблица расширяет «Таблицу», у нее уже есть все функции. Может быть, когда контейнер вызывает функции, возвращающие данные и т. Д., Родительская «Таблица» перенастраивает пустые данные. По-видимому, не существует чрезмерных методов для извлечения данных из вашей внутренней копии. Другими словами, вы можете удалить все ссылки на 'resultTable' в своем классе. – jr593
Я расширяю таблицу, потому что мне придется лениво загружать несколько строк (это всего лишь манекен, реальный может быть длиной в тысячу строк). Итак, вы говорите, что если я расширяю таблицу, я могу напрямую добавлять к ней строки без создания таблицы, потому что расширение таблицы классов уже создает ее? – antobbo
прочитал несколько руководств о том, как работать с расширенными классами в java. – d2k2