Проблемы с GWT FlextableJAVA

Программисты JAVA общаются здесь
Anonymous
Проблемы с GWT Flextable

Сообщение Anonymous »

Недавно я создал гибкую таблицу с использованием GWT 2.4, используя этот код:

Код: Выделить всё

@uiBinder Flextable flextable;
В конструкторе я вызываю setupFlexTable() после того, как это сделаю

Код: Выделить всё

initWidget(uiBinder.createAndBindUi(this));


а затем создается экземпляр flexTable. Я пропустил эту часть. Использование setText() работает.

Код: Выделить всё

 //Header row
private void setupFlexTable() {
flexTable.setText(0, 0, "Label One");
flexTable.setText(0, 1, "Label Two");
}
setWidget не отобразился, но я использовал вот что:

Код: Выделить всё

int numRows = flexTable.getRowCount();
flexTable.setWidget(numRows, 0, new Label("Label One"));
flexTable.setWidget(numRows, 1, new Label("Label Two"));
flexTable.getFlexCellFormatter().setRowSpan(0, 1, numRows + 1);
Здесь я добавляю строки, и этот код работает с setWidget():

Код: Выделить всё

@Override
public void setRowData(Data data) {
int rowCount = flexTable.getRowCount() + 1;
flexTable.setWidget((rowCount), 0, new Label(data.getDataName()));
flexTable.getFlexCellFormatter().setRowSpan(rowCount, 0, 2);
flexTable.setWidget((rowCount), 1, new Label(data.getData()));
flexTable.getFlexCellFormatter().setRowSpan(rowCount, 1, 2);
}
Кроме того, когда я использую flexTable.setText("Label One"); и т. д... он отображается, но когда я использую setWidget(), это не так?

Другая проблема: мне нужно синхронизировать эту таблицу со списком файлов над ней, но с помощью Firebug я вижу, что если я динамически добавляю в таблицу две строки, она показывает rowCount, равный 4? Это вызывает ошибку индекса за пределами границ, когда я пытаюсь удалить строку и достигает одной из этих пустых строк.

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

Код: Выделить всё

int rows = flexTable.getRowCount();

for(int i=0; i < rows; i++){
//Match the text in the first field in order to know the proper row to delete.
if(flexTable.isCellPresent(i,0) && flexTable.getText(i, 0).equalsIgnoreCase(fileName)){
flexTable.removeRow(i);
break;
}
}
Так может ли кто-нибудь объяснить, почему setWidget() ничего не отображает и почему я получаю дополнительную пустую строку для каждой добавляемой строки?

Вернуться в «JAVA»