2013-06-12 30 views
0

我有一個的ContentPanel,它被設置爲可摺疊摺疊的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" 

我認爲這是一種渲染問題

+0

在設置新標題 – swamy

+0

後調用bottomPanel.layout()既不會調用bottomPanel.layout()也不會調用bottomPanel.repaint() –

+0

一旦將標題設置爲gxt contentpanel,它將被摺疊或不折疊,它將在那裏。所以摺疊後,你必須設置標題和調用佈局。 – swamy

回答

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 
+0

因此,如果面板被摺疊,那麼沒有辦法設置標題? –

+0

不幸的是,當時不是這樣使用控件。 –

0

雖然是不可能的,而它是摺疊可以編寫一個解決方法,以更新的ContentPanel的標題:

  1. 展開面板
  2. 設置一個新的標題
  3. 崩潰面板

除此之外,這是一種解決方法,而不是美麗的只有一個缺點:用戶將看到面板崩潰(自動)。只要這不會打擾您,此解決方法將爲「摺疊」面板設置新標題。

首先:不要致電setCollapsible(boolean)LayoutData,但在ContentPanel!否則這將無法正常工作。

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,當所有目前正在等待事件處理程序已經完成了將執行。

0

這裏是我使用的簡化版本(GXT 3)。

下面的代碼顯示CollapsePanel一些文本時,北小部件倒塌:

borderLayoutContainer.addCollapseHandler(
    new CollapseItemHandler<ContentPanel>() { 
     @Override 
     public void onCollapse(CollapseItemEvent<ContentPanel> event) { 
      if (event.getItem() == northContentPanel) { 
       CollapsePanel collapsePanel = (CollapsePanel) borderLayoutContainer.getNorthWidget(); 
       collapsePanel.getElement().insertFirst("<span style='color: red; font-size: bold;'>Here is the collapsed panel title</span>"); 
      } 
     } 
    }); 

課程,而不是插入你的標題作爲CollapsePanel的第一要素,你可以做一些更聰明的像inserting a complex widget中。