是否有一些干净的解决方案(或干净的解决方法)用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