2014-02-19 59 views
0

我學習的GWT框架,我想創建一個自定義窗口小部件:這個小部件是操作的菜單中包含一個按鈕。GWT部件:2個不同的clickhandlers

如果你點擊三角形的區域我想要一個帶有一些選項(可能的操作)的菜單,如果我點擊按鈕的其他部分,我希望操作是第一個從列表中。 我已經把一個ListBox小部件放在Button小部件中,我想要2個不同的clickListener。問題是按鈕內的列表框的監聽器不工作。 你知道爲什麼嗎?

繼碼

公共類MyClass的擴展複合{

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); 
} 

}

回答

2

不要在列表框使用clickHandler事件。改用ChangeHandler。

另外,我不認爲你需要惹這裏的元素。只需將您的Button小部件和您的ListBox小部件添加到容器(即某個面板)即可。如果需要,您可以在ListBox頂部添加按鈕。

+0

嗨安德烈,感謝您的回覆。我已經嘗試了changeHandler而不是clickHandler,但沒有執行(我甚至在調試模式下試過)。這樣看來,分配給內部小部件的所有處理程序都被刪除(或可能被覆蓋)。 我試圖並排添加小部件,但很難達到我想要的效果。 – Agosteeno

+0

當您執行.getElement()。appeandChild()時,您的處理程序會消失。您不需要並排添加小部件,您可以添加小部件,因此只能看到一個按鈕。使用CSS或面板來達到這個效果。 –

+0

謝謝安德烈。 – Agosteeno

相關問題