当我在Stackpanel上的widget之间切换时,有没有办法获得一个事件? 类似于stackpanel的openhandler。我必须知道索引 在Stackpanel上打开一个Widget。
答案 0 :(得分:1)
使用StackLayoutPanel:http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/StackLayoutPanel.html
使用addSelectionHandler()
方法。要获取所选小部件,您可以使用getVisibleIndex()
或getVisibleWidget()
。
myStackPanel.addSelectionHandler(new SelectionHandler<Integer>() {
@Override
public void onSelection(SelectionEvent<Integer> event) {
int selectedWidgetIndex = stackPanel.getVisibleIndex());
//Do stuff with the selectedWidgetIndex
}
});
编辑:这是使用StackLayoutPanel,OP使用StackPanel。它们之间的区别在于StackPanel用于quirks模式,StackLayout Panel用于标准模式。我将StackLayoutPanel或任何与布局相关的小部件作为新的GWT小部件使用它们,就像新的DataGrid一样。
答案 1 :(得分:1)
您可以在DecoratedStackPanel(可能还有StackPanel)上添加点击处理程序,并使用getSelectedIndex(),如下所示:
myDecoratedStackPanel.addHandler(new ClickHandler()
{
@Override
public void onClick(ClickEvent clickEvent)
{
Window.alert("" + myDecoratedStackPanel.getSelectedIndex());
}
}, ClickEvent.getType());
答案 2 :(得分:0)
通过覆盖showStack
方法,这是一件轻而易举的事。尝试类似:
public class StackPanelX extends StackPanel implements IHasChangeHandler {
String ctx_id=null;
IChangeHandler chandler=null;
public StackPanelX() {
super();
}
public void showStack(int index) {
int currentStack = this.getSelectedIndex();
super.showStack(index);
if (currentStack!=index)
if (chandler!=null)
chandler.onChange(ctx_id, new Variant(index));
}
@Override
public void setChangeHandler(String ctx_id, IChangeHandler handler) {
this.ctx_id=ctx_id;
this.chandler=handler;
}
}