2013-06-12 29 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中。