Метод getRowCount() гибкой таблицы Gwt не возвращает текущее значение

Я использую GWTFlexTable и есть одна проблема: я удаляю любую строку после этого, когда я пытаюсь добавить новую строку, это дает rowcount значение, включая удаленную строку, из-за этого при выполнении итерации последней строки IndexOutOfBoundsException,

for( count=0; count < table.getRowCount(); count++ )
{

}

Давая это исключение

[FATAL] Uncaught Exception:
 [java] java.lang.IndexOutOfBoundsException:
 [java] Column index: 0, Column size: 0

2 ответа

Если вы используете кнопку для удаления строки.. напишите обработчик щелчка при удалении перикулярной строки.

 Button removeSelectedRow = new Button();
 removeSelectedRow.addClickHandler(new ClickHandler() {
  @Override
  public void onClick(ClickEvent event) {
    int rowIndex = flexTable.getCellForEvent(event).getRowIndex();
    flexTable.removeRow(rowIndex);
  }
}); 

Не используйте rowCount().
используйте как это getRowIndex() позиция. Это поможет удалить строку, которую он может представить в любом порядке, в любой позиции или в любом месте на вашей странице. это ваша потребность?

Пожалуйста, ознакомьтесь с демонстрацией GWT Showcase - FlexTable.

Вот код для добавления / удаления строки непосредственно из витрины. Используйте эти методы для выполнения этих операций. Всегда проверяйте количество строк, прежде чем выполнять какие-либо операции.

/**
 * Add a row to the flex table.
 */
private void addRow(FlexTable flexTable) {
    int numRows = flexTable.getRowCount();
    flexTable.setWidget(numRows, 0, widget1));
    flexTable.setWidget(numRows, 1, widget2));
    flexTable.getFlexCellFormatter().setRowSpan(0, 1, numRows + 1);
}

/**
 * Remove a row from the flex table.
 */
private void removeRow(FlexTable flexTable) {
    int numRows = flexTable.getRowCount();
    if (numRows > 1) {
        flexTable.removeRow(numRows - 1);
        flexTable.getFlexCellFormatter().setRowSpan(0, 1, numRows - 1);
    }
}
Другие вопросы по тегам