GWT - FlexTable - не может видеть добавленную строку - PullRequest
1 голос
/ 24 июня 2011

Я пишу тест, чтобы увидеть, как должны работать обработчики событий, но, похоже, я здесь что-то делаю не так, потому что не могу увидеть добавленный виджет в flextable: (

Вот мой фрагмент кода

Композит А:

B b=new B();
Button addItemButton = new Button("+");
        addItemButton.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                Window.alert("Hello world!");
                b.addItem(itemTable);
            }

        });

Композит B:

public void addItem(FlexTable itemTable)
    {



        itemTable.add(new C());
    }

Композит C:

...

Button removeRow=new Button();
removeButton.addClickHandler(new ClickHandler() {
                public void onClick(ClickEvent event) {

                    itemTable.removeRow(?);
                }

            });

Я имею в виду, что ничего не добавляется в itemTable, когда я запускаю его как приложение GWT в своем браузере по умолчанию. Как обновить ItemTable или что-то, чтобы увидеть его добавленные или удаленные строки?

Любые полезные комментарии приветствуются

Ответы [ 3 ]

1 голос
/ 24 июня 2011

Вам необходимо получить и использовать текущий счетчик строк во время выполнения

itemTable.setWidget(itemTable.getRowCount(),0,new Label("Hello world"));
1 голос
/ 04 января 2012

Вам нужно более внимательно посмотреть на пример GWT Stocks. Это раздел кода, который фактически добавляет строку:

 // Add the stock to the table.
    int row = stocksFlexTable.getRowCount();
    stocks.add(symbol);
    stocksFlexTable.setText(row, 0, symbol);

Вызов stocksFlexTable.setText() - это то, что создает строку в таблице и устанавливает текст. Поэтому ваш код для B и C должен выглядеть примерно так:

//In Composite B
public void addItem(FlexTable itemTable) {  
  int row = itemTable.getRowCount();
  itemTable.setText(row, 0, symbol);
  itemTable.add(new C(row));
}

//In Composite C, the constructor saves the int argument as the field 'row'
Button removeRow=new Button();
removeButton.addClickHandler(new ClickHandler() {
  public void onClick(ClickEvent event) {
    itemTable.removeRow(C.this.row);
  }
});

Если вы просто хотите разместить несколько виджетов друг над другом (поэтому, если вы не создаете более одного столбца в таблице), вам следует просто использовать VerticalPanel. Это add() метод сделает то, что вы ожидали.

0 голосов
/ 24 июня 2011

попробуйте использовать метод setWidget.

public void addItem(FlexTable itemTable)
{
        itemTable.setWidget(0,0,new Label("Hello world"));
}

setWidgets запрашивает аргументы (строка, столбец, виджет).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...