0

最近、次のコードを使用して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()が何も表示しない理由と、追加する行ごとに余分な空白行が表示される理由を誰かが説明できますか?

4

3 に答える 3

2

コードでFlexTableをインスタンス化しないでください。GWTがインスタンス化を行います。new FlexTableウィジェットに含まれているオブジェクトではなく、新しいオブジェクトで作業していることを確認します。投稿したコードには、1つの変数が呼び出されflextable、別の変数が呼び出されていflexTableます。混乱が発生していることは容易に想像できます。

これを適切に設定すれば、他の問題がより明確になると思います。

于 2012-01-04T18:28:57.993 に答える
0

行、列、ウィジェットの設定が最初に間違っていました。愚かな構文の問題。これは最初の問題の正しいコードです。

flexTable.setWidget(0, 0, new Label("Label One"));

これが2番目の質問に対する答えです。

これは問題のあるコード行でした:

flexTable.getFlexCellFormatter().setRowSpan(rowCount, 0, 2);

行、列、行スパンであるはずで、私はそれを混同していたので、空白行を追加していました。

于 2012-01-05T17:00:48.393 に答える
0

現在、FlexTableは、旧式の要素属性を使用して、要素tdの幅の高さなどを揃えています。HTML5以降、これらはサポートされなくなりました。GWTは、これらの非常に古い要素属性の代わりにCSSを使用するように、HTMLTableをオーバーライドするFlexTableおよびその他のクラスを変更する必要があります。

于 2014-04-06T09:10:00.963 に答える