2016-07-13 3 views
0

Я создал таблицу в своем классе 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, есть ли другой способ добавить таблицу в качестве компонента в макет, или я просто делаю что-то глупое?

+1

Я вижу, что вы расширяете 'Таблицу' в своей' FileUploaderResultsTable', а затем создаете в нем новую копию 'Table'. Зачем ? Поскольку ваша таблица расширяет «Таблицу», у нее уже есть все функции. Может быть, когда контейнер вызывает функции, возвращающие данные и т. Д., Родительская «Таблица» перенастраивает пустые данные. По-видимому, не существует чрезмерных методов для извлечения данных из вашей внутренней копии. Другими словами, вы можете удалить все ссылки на 'resultTable' в своем классе. – jr593

+0

Я расширяю таблицу, потому что мне придется лениво загружать несколько строк (это всего лишь манекен, реальный может быть длиной в тысячу строк). Итак, вы говорите, что если я расширяю таблицу, я могу напрямую добавлять к ней строки без создания таблицы, потому что расширение таблицы классов уже создает ее? – antobbo

+0

прочитал несколько руководств о том, как работать с расширенными классами в java. – d2k2

ответ

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"); 
    } 
} 
+0

да это работает. Хорошо, я думаю, что я последую вашему предложению и прочитаю учебник по расширенным классам, поскольку я явно не знал, что делаю. Можете ли вы порекомендовать хороший учебник самостоятельно, или я должен просто найти его в Google? – antobbo

+0

Я думал, что обновляю это быстро, поскольку, похоже, у меня возникает странная проблема. Поэтому я создал таблицу так, как вы предложили @ d2k2, и она работает. Таблица сидит в другом окне, какое-то всплывающее окно, и когда я закрываю его и снова открываю его (есть цикл, который заполняет строки), таблица пуста. SO, по сути, работает только в первый раз: это потому, что таблица создается только один раз, так как я использую класс, который расширяет таблицу? – antobbo

+0

таблица заполняется только при создании объекта. Я не знаю, как выглядит ваш код, поэтому я не могу помочь вам с другими проблемами. – d2k2