2009-12-30 100 views
1

我想單擊一個圖像,因此想要註冊(例如)一個ClickHandler。我從ClientResource獲得的圖像。這工作到目前爲止將圖像設置爲一個表單元格:如何將GWT點擊監聽器添加到圖像?

MyResources.INSTANCE.css().ensureInjected(); 
Image colorImage = new Image(MyResources.INSTANCE.colorImage()); 
Element colorImageElement = colorImage.getElement(); 

colorImage.addClickHandler(new ClickHandler() { 
public void onClick(ClickEvent event) { 
    System.out.println(event); 
} 
}); 

TableElement table = Document.get().createTableElement(); 
TableRowElement headRow = table.insertRow(-1); 
headRow.insertCell(-1).appendChild(colorImageElement); 

RootPanel.get().getElement().appendChild(table); 

如何添加一個監聽器的圖標?我試過ClickHandler並將圖像放在PushButton上,並從此PushButton中獲取元素,但都不起作用。

但是,如果我將小部件(圖像是一個小工具)添加到它的工作面板!

RootPanel.get().add(colorImage); 

但我沒有在這裏使用小部件,但與元素。所以處理程序消失,這就是我不知道如何保留這個添加的處理程序信息。

最後,我想建立一個不同行的表,我可以點擊圖標,我得到一個彈出菜單,從而改變行的顏色。

回答

3

你應該可以添加一個ClickHandler(或者一個MouseDownHandler,如果這更符合你的需求的話)。

像這樣:

colorImage.addClickHandler(new ClickHandler() { 
      public void onClick(ClickEvent event) { 
       // Do something.... 
      } 
     }); 
+0

我以前試過,但這不起作用。我嘗試了不同的處理程序,FocusWidget,...沒有反應。 – Paulus 2009-12-30 17:52:50

+0

@Paulus:在我目前正在進行的一個項目中,我正是這樣做的,但是使用MouseDownHandler(addMouseDownHandler)並且效果很好,單擊處理程序應該同樣好。請在實際嘗試的地方張貼更多的代碼,但是會失敗。也許這只是一個愚蠢的錯字或什麼。 – Fredrik 2009-12-30 18:25:26

+0

感謝您的幫助。我用適合onModuleLoad()的演示更新了我的問題,該演示顯示此解決方案不起作用。 – Paulus 2009-12-31 02:22:59

0

做你嘗試添加image.sinkEvents(Event.ONCLICK | Event.MOUSEEVENTS)?

0

圖像必須在焦點小部件中。我不知道這是爲什麼,但是在某些地方事件沒有得到正確的傳播,並且DOM事件不會觸發。

1

不要打開您的小部件並僅附加DOM元素。 Widget類允許您的代碼同時引用元素和事件,並處理可能的內存泄漏,並以邏輯方式對您的代碼進行分組。

這可能會使其他框架的意義,但在GWT你幾乎總是需要直接與小部件協同工作,將它們放在一起,然後將它們附加到RootPanel。

如果您確實想使用html表來構建它,請查看com.google.gwt.user.client.ui.HTMLTable的子類com.google.gwt.user.client.ui.Gridcom.google.gwt.user.client.ui.FlexTable。這可能不應該是必須的,除非您將多個項添加到表中 - 嘗試指定佈局時,請使用實際的佈局類。

相關問題