是否有一些乾淨的解決方案(或乾淨的解決方法)用href來包圍更多的元素。 例如。 我有這樣的事情GWT周圍的元素與href
VerticalPanel vp = new VerticalPanel();
Label l1 = new Label("This is label 1");
Label l2 = new Label("This is label 2");
vp.add(l1);
vp.add(l2);
我想從這種結構使HREF。
是否有一些乾淨的解決方案(或乾淨的解決方法)用href來包圍更多的元素。 例如。 我有這樣的事情GWT周圍的元素與href
VerticalPanel vp = new VerticalPanel();
Label l1 = new Label("This is label 1");
Label l2 = new Label("This is label 2");
vp.add(l1);
vp.add(l2);
我想從這種結構使HREF。
方式1.使用HTMLPanel與外< A>元素:
hp = new HTMLPanel("<a href=... id="myid"></a>");
hp.add(vp, "myid");
方式2.在所有標籤元件安裝clickHandlers:
ch = new ClickHanler() {
public void onClick(ClickEvent event) {
Window.open(...);
}
};
l1.addClickHandler(ch);
l2.addClickHandler(ch);
乾淨(ER)的解決辦法是,IMHO ,使用FocusPanel
。您可以將ClickHandler
添加到整個面板 - 結果是,無論你在面板點擊將由一個ClickHandler
得到處理(無需在ClickHandler
添加到所有的Widgets
內):
VerticalPanel vp = new VerticalPanel();
Label l1 = new Label("This is label 1");
Label l2 = new Label("This is label 2");
vp.add(l1);
vp.add(l2);
FocusPanel focusPanel = new FocusPanel();
focusPanel.add(vp);
ClickHandler clickHandler = new ClickHanler() {
public void onClick(ClickEvent event) {
Window.open(...);
}
};
focusPanel.addClickHandler(clickHandler);
請請注意0是SimplePanel
--這意味着它只能容納一個Widget
,最有可能的是另一個Panel
,如VerticalPanel
在這種情況下。 FocusPanel
實現了很多其他的處理程序,因此一定要檢查它們 - 它們在其他用例中往往非常有用。
創建一個類HrefVerticalPanel,你重寫add方法包圍添加的元素與錨定對象
class HrefVerticalPanel extends VerticalPanel {
public void add(Widget w) {
Anchor surrounding = new Anchor();
surrounding.add(w);
super.add(surrounding);
handleAnchorUrl(surrounding);
}
protected void handleAnchorUrl(Anchor toBeClicked) {...}
}
非常感謝你。點擊處理程序出現問題,它執行得更新,所以我做了小的更正: – zvjerka24 2011-12-30 20:34:43