2011-12-30 87 views
1

是否有一些乾淨的解決方案(或乾淨的解決方法)用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

方式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); 
+0

非常感謝你。點擊處理程序出現問題,它執行得更新,所以我做了小的更正: – zvjerka24 2011-12-30 20:34:43

2

乾淨(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實現了很多其他的處理程序,因此一定要檢查它們 - 它們在其他用例中往往非常有用。

0

創建一個類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) {...} 
}