最近、次のコードを使用してGWT2.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()を使用すると表示されませんか?
もう1つの問題は、このテーブルをその上のファイルのリストと同期させる必要があることですが、Firebugを使用すると、テーブルに2つの行を動的に追加すると、rowCountが4になることがわかります。これにより、行を削除しようとしたときにインデックスが範囲外のエラーがスローされ、これらの空白行の1つに到達します。
回避策として、このコードを使用して、削除する必要のある行を見つけ、空白行の問題を回避します(明らかに、テーブルには2つだけの空白行が挿入されています)。
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()が何も表示しない理由と、追加する行ごとに余分な空白行が表示される理由を誰かが説明できますか?