2012-07-25 38 views
0

我面臨着CollapsePanel的問題。GXT重畫CollapsePanel標題

當事件被觸發時,我需要改變它的標題。 到目前爲止,我重寫的BorderLayout的createCollapsePanel和偵聽器添加到我需要的事件:

final BorderLayout layout = new BorderLayout() 
{ 

    @Override 
    protected CollapsePanel createCollapsePanel(final ContentPanel panel, final BorderLayoutData data) 
    { 
     final CollapsePanel result = super.createCollapsePanel(panel, data); 
     panel.getHeader().addListener(Events.Change, new Listener<BaseEvent>() 
     { 
      @Override 
      public void handleEvent(BaseEvent be) 
      { 
       result.setTitle(panel.getHeading()); 
       result.repaint(); 
       layout(); 
      } 
     }); 
     result.setTitle(panel.getHeading()); 
     return result; 
    } 
}; 

上面的代碼執行得很好,但是導致CollapsePanel從來沒有獲得新的稱號。

有什麼我失蹤? 感謝

回答

0
final BorderLayout layout = new BorderLayout() 
    { 
     @Override 
     protected CollapsePanel createCollapsePanel(final ContentPanel panel, final BorderLayoutData data) 
     { 
      final CollapsePanel result = super.createCollapsePanel(panel, data); 

      result.sinkEvents(Events.Change.getEventCode()); 
      panel.getHeader().addListener(Events.Change, new Listener<BaseEvent>() 
      { 
       @Override 
       public void handleEvent(BaseEvent be) 
       { 
        result.getElement().getElementsByTagName("span").getItem(0).setInnerText(panel.getHeading()); 
        PcTreeUI.this.layout(true); 
       } 
      }); 
      result.setTitle(panel.getHeading()); 
      return result; 
     } 
    }; 
0

您可能需要下沉

result.sinkEvents(Events.Change); 

(我切換到gxt3這確實是有點不同,你正在聽的......事件,所以我沒有測試過該行。我不知道你是否需要Events.Change或Events.OnChange)

+0

不幸的是,它並沒有幫助。處理程序get的執行無論如何,但更改不反映在瀏覽器中。 – Andrew 2012-07-25 08:59:26