包含另一个小部件的gwt小部件:2个不同的点击处理程序

时间:2014-02-19 17:18:03

标签: java gwt widget

我正在研究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);
}

}

1 个答案:

答案 0 :(得分:2)

不要在ListBox上使用ClickHandler。改为使用ChangeHandler。

另外,我认为你不需要在这里弄乱元素。只需将Button小部件和ListBox小部件添加到容器(即某个面板)即可。如果需要,可以在ListBox顶部添加按钮。