当我在GWT 2.0中切换StackLayoutPanel的堆栈时,我正试图捕获一个事件。
最大的问题是我不知道哪个事件被触发并且似乎没有文档,我添加了一个带有addDomHandler()的ChangeHandler但是没有用。
不幸的是,StackLayoutPanel没有实现getSelectedIndex() - 函数,因此我不能只使用ClickEvent,然后检查所选索引是否已更改。
我唯一的解决方案是使用StackPanel还是有办法让它与StackLayoutPanel一起使用?
答案 0 :(得分:3)
我相信GWT 2.0.3 StackLayoutPanel有方法addSelectionHandler。 Fired事件是SelectionEvent,event.getSelectedItem()返回相应的堆栈头ID。
答案 1 :(得分:2)
经过一些实验后我做了什么:使用Label作为标题的小部件,宽度为100%,然后添加一个附加的ClickEvent处理程序。每次ClickEvent到达时,都意味着用户点击了标题,因此面板将可见... 不是很好,但它有效。 我尝试使用ClickWrapper包装标题小部件(看看StackLayoutPanel源代码),但它没有用,我不知道为什么......
答案 2 :(得分:1)
我是这样做的
公共类StackComponent扩展StackLayoutPanel实现HasChangeHandlers {
public StackComponent(Unit unit) {
super(unit);
}
@Override
public void showWidget(Widget widget) {
super.showWidget(widget);
fireEvent(new StackChangeEvent(widget));
}
@Override
public HandlerRegistration addChangeHandler(ChangeHandler handler) {
return addDomHandler(handler, ChangeEvent.getType());
}
}
答案 3 :(得分:0)
这对我有用:
private int selectedIndex = 0;
public Main() {
initWidget(ourUiBinder.createAndBindUi(this));
navigatorStackPanel.add(yourWidgetOne, "Title one");
navigatorStackPanel.add(yourWidgetTwo, "Title two");
navigatorStackPanel.addHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (navigatorStackPanel.getSelectedIndex() != selectedIndex) {
selectedIndex = navigatorStackPanel.getSelectedIndex();
if (selectedIndex == 0)
do something one;
else
do something two;
GWT.log(" Changed");
}
}
}, ClickEvent.getType());
}