0

折りたたみ可能に設定されたContentPanelがあります

ContentPanel bottomPanel = new ContentPanel();
BorderLayoutData layoutData = new BorderLayoutData(LayoutRegion.SOUTH);
layoutData.setSplit(true);
layoutData.setCollapsible(true);

// some code

add(bottomPanel, layoutData);

そのパネルの見出しを次のように設定します

bottomPanel.setHeading("title");

パネルが折りたたまれていない場合、見出しを設定すると、そのパネルの新しい見出しが設定されます。ただし、パネルが折りたたまれていると機能しません。見出しは、折りたたまれていない間は常に最後の見出しセットを表示します。折りたたまれた状態と折りたたまれていない状態の両方で、ゲッターは常に新しい見出しを返します

bottomPanel.getHeading(); // "old Heading"
bottomPanel.setHeading("new Heading");
bottomPanel.getHeading(); // "new Heading"

一種のレンダリングの問題だと思います

4

3 に答える 3

0

ContentPanel が折りたたまれている場合、タイトルバー (HEAD) は CollapsedPanel に置き換えられ、独自のヘッダー要素が作成され、変更のためにアクセスできなくなります (ContentPanel の見出しを変更しても)。

CollapsePanel.class > onRender(...) を確認してください

com.extjs.gxt.ui.client.widget.ContentPanel
com.extjs.gxt.ui.client.widget.CollapsePanel
com.extjs.gxt.ui.client.widget.layout.BorderLayout
于 2013-06-12T19:09:46.147 に答える
0

折りたたまれている間に ContentPanel の見出しを更新することはできませんが、回避策をコーディングできます。

  1. パネルを広げる
  2. 新しい見出しを設定する
  3. パネルを折りたたむ

これは回避策であり、美しくないことに加えて、欠点が 1 つあります。パネルが (自動的に) 折りたたまれます。これが問題にならない限り、この回避策は新しい見出しを「折りたたまれた」パネルに設定します。

まず第一に: ではなく! を呼び出しsetCollapsible(boolean)てください。そうしないと、これは機能しません。LayoutDataContentPanel

ContentPanel bottomPanel = new ContentPanel();
bottomPanel.setCollapsible(true);
BorderLayoutData layoutData = new BorderLayoutData(LayoutRegion.SOUTH);
layoutData.setSplit(true);
//layoutData.setCollapsible(true);

これが完了したら、次のように新しい見出しを設定できます。

public void setNewHeading(ContentPanel panel, String heading) {
  if(panel.isCollapsed()) {
    panel.expand();
  }

  panel.setHeading(heading);

  DeferredCommand.addCommand(new Command() {
    public void execute() {
      panel.collapse();
    }
  });
}

ここで重要なのは、DeferredCommand現在保留中のすべてのイベント ハンドラーが完了すると実行される です。

于 2014-02-14T15:29:06.360 に答える