GXT重绘CollapsePanel标题

时间:2012-07-25 06:22:33

标签: java 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永远不会获得新标题。

我有什么遗失的吗? 感谢

2 个答案:

答案 0 :(得分:0)

你可能需要接受你正在听的事件......

result.sinkEvents(Events.Change);

(我切换到gxt3,它做的有点不同,所以我没有测试过那条线。我不确定你是否需要Events.Change或Events.OnChange)

答案 1 :(得分: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;
        }
    };