是否有一些干净的解决方案(或干净的解决方法)用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。
答案 0 :(得分:2)
一个干净的(呃)解决方案是,恕我直言,使用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);
请注意,FocusPanel
是SimplePanel
- 这意味着它只能包含一个Widget
,很可能只有Panel
,例如VerticalPanel
。
FocusPanel
实现了很多其他处理程序,所以一定要检查它们 - 它们在其他用例中往往非常有用。
答案 1 :(得分: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);
答案 2 :(得分:0)
创建一个HrefVerticalPanel类,您可以在其中覆盖add方法以使用Anchor对象包围添加的元素
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) {...}
}