0

我遇到了 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 永远不会得到新的标题。

有什么我想念的吗?谢谢

4

2 回答 2

0

您可能需要接收您正在收听的事件......

result.sinkEvents(Events.Change);

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

于 2012-07-25T07:31:24.900 回答
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;
        }
    };
于 2012-07-26T18:56:22.757 回答