我遇到了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 :(得分: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;
}
};