2011-12-30 73 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) {...} 
}