1

DisclosurePanel 内で ResizeLayoutPanel を使用すると問題が発生します。

私は ResizeLayoutPanel に Datagrid を持ち、DisclosurePanel 内に ResizeLayaoutPanel を持っています。問題は、データがロードされるときです。DisclosurePanel が閉じられている場合、ユーザーがdisclosurePanel を開くと、テーブルが空であることがわかります。DisclosurePanel が開いているときにユーザーがこのアクションを実行すると、正常に動作します。

どうすればこの問題を解決できますか?

これはコードです:

ResizeLayoutPanel resizeLayoutPanel = new ResizeLayoutPanel();

    resizeLayoutPanel.setWidth("100%");
    resizeLayoutPanel.setStyleName("gwt-resizeLayoutPanel-Example");

    /****CREATE COLUMNS [BEGIN] ***************************************************************************/
    // Create column.
    TextColumn<Object> column = new TextColumn<Object>() {
        @Override
        public String getValue(Object object) {
            return "Test";
        }
    };
    /******CREATE COLUMNS [END] ***************************************************************************/


    cellTable = new DataGrid<Object>();
    cellTable.addColumn(column, "Example");
    cellTable.setKeyboardSelectionPolicy(HasKeyboardSelectionPolicy.KeyboardSelectionPolicy.BOUND_TO_SELECTION);
    cellTable.setWidth("100%");
    cellTable.setEmptyTableWidget(new Label("Example table"));

    resizeLayoutPanel.add(cellTable);

    //Link dataProvider with CellTable
    dataProvider.addDataDisplay(cellTable);

    this.container = ModuleContainer.getAdvancedDisclosurePanel("Samples");
    this.container.setWidth("100%");
    this.container.setContent(resizeLayoutPanel);

    return this.container;
4

1 に答える 1

0

ResizeLayoutPanel はサイズ変更を提供します (ProvidesResize を実装します) が、サイズ変更を必要としません (RequiresResize を実装しません)。

プレーンな状態の ResizeLayoutPanel はサイズ変更をリッスンしないため、意図的にサイズを変更するか、サイズを変更するコードを記述する必要があります。おそらく、幅と高さを 100% に設定します。

そして、なぜテーブルを ResizeLayoutPanel 内に配置したのですか?

ResizeLayoutPanel は、Resize が必要なウィジェットのサイズ変更を提供します。ResizeLayoutPanel がサイズを変更できるように、セルテーブルを拡張して RequiresResize を実装する必要があります。

GWT をプログラミングするときに誰もが学ぶ必要がある最初の概念は、ルートのサイズ変更パネルから切れ目のない RequiresResize-RequiresResize のチェーン/ツリーを作成する理由/方法を理解することです。サイズ変更チェーン/ツリーのルートが RootLayoutPanel でない場合は、そのルートのサイズを意図的に変更する必要があります。

この場合、ResizeLayoutPanel を存在しないサイズ変更チェーンのルートにしています。RequiresResize を実装する別のパネルを使用して、親がサイズを変更できるようにするだけでなく、親がユーザーまたは別のサイズ変更可能な親によって手動でサイズ変更できるようにします。

サイズを変更する方法を提供せず、サイズ変更チェーンのルートとして使用せずに ResizeLayoutPanel を使用する理由は何ですか?

于 2012-09-06T02:28:17.900 に答える