我正在研究GWT框架,我正在尝试创建一个自定义小部件:这个小部件是一个包含在操作菜单中的按钮。
如果你点击三角形的区域,我想要一个带有一些选项的菜单(可能的操作),如果我点击按钮的其他部分,我希望操作是列表中的第一个。 我已将ListBox小部件放在Button小部件中,我想要2个不同的clickListener。问题是按钮内的listBox的监听器不起作用。 你知道为什么吗?
遵循代码
public class MyClass扩展了Composite {
private ListBox options;
private Button saveButton;
private HorizontalPanel savePanel;
private int indexHandler;
public MyClass(String label, List<String> operationList, final List<Command> commandList) {
savePanel = new HorizontalPanel();
initWidget(savePanel);
options = new ListBox();
saveButton = new Button(label);
for(String operation : operationList){
options.addItem(operation);
}
options.sinkEvents(Event.ONCLICK);
options.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
System.out.println("Test1");
indexHandler = options.getSelectedIndex();
commandList.get(indexHandler).execute();
options.setItemSelected(0, true);
}
});
saveButton.getElement().appendChild(options.getElement());
saveButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
System.out.println("Test2");
commandList.get(0).execute();
options.setItemSelected(0, true);
}
});
savePanel.add(saveButton);
}
}
答案 0 :(得分:2)
不要在ListBox上使用ClickHandler。改为使用ChangeHandler。
另外,我认为你不需要在这里弄乱元素。只需将Button小部件和ListBox小部件添加到容器(即某个面板)即可。如果需要,可以在ListBox顶部添加按钮。