我有一个由文本框和自定义小部件组成的复合小部件,然后将其添加到verticalPanel。我使用Raphael JS创建了这个自定义小部件。
现在我想要这个Composite小部件识别click事件和ctrl事件。我尝试在两个类中实现clicklistener,但没有取得丰硕成果。
这是代码布局:
此类从Raphael JS创建自定义小部件:
public class CustomShapeRet extends RaphaelJSWidget{
public CustomShapeRet(){
super();
Rectangle r = new Rectangle(10, 10, 50, 20);
r.attr("stroke", "black");
r.attr("stroke-width", "5");
}
}
此类创建复合小部件:
public class Test extends Composite{
public Test(){
TextBox t1 = new TextBox();
t1.setSize("100px", "20px");
t1.setText("Hi");
t1.setTitle("textbox");
CustomShapeRet r = new CustomShapeRet();
r.setTitle("rec");
VerticalPanel v1 = new VerticalPanel();
v1.setStyleName("vertical");
v1.add(r);
v1.add(t1);
initWidget(v1);
}
}
问题: 有没有办法让这个工作?你的建议是什么?
谢谢。
答案 0 :(得分:1)
你必须在你的“Test”复合widget中实现HasClickHandler接口。它会强制你实现addClickHandler方法。然后你可以添加clickHandler。你可以实现以下所有iterfaces取决于你的requirementsHasAllFocusHandlers,HasAllKeyHandlers,HasAllMouseHandlers。如果你想为CustomShapeRet添加点击列表器,那么也在那里实现接口。对于示例代码,请查看以下线程:
How do I add MouseEvents to an AbsolutePanel?
试试吧。我对RaphaelJSWidget一无所知。
public class CustomShapeRet extends RaphaelJSWidget implements HasClickHandler{
public CustomShapeRet(){
super();
Rectangle r = new Rectangle(10, 10, 50, 20);
r.attr("stroke", "black");
r.attr("stroke-width", "5");
}
public HandlerRegistration addMouseOutHandler(MouseOutHandler handler) {
return addDomHandler(handler, MouseOutEvent.getType());
}
}
我假设您的RaphelJSWidget类扩展了Widget类。如果确实如此,您可以添加click handler.It应该可以工作。
答案 1 :(得分:0)
如何将Composite
包裹在FocusPanel
而不是VerticalPanel
中? (如果您需要布局,可以将VerticalPanel
放在FocusPanel
中,但请确保FocusPanel
是您拨打的initWidget
上的那个)然后您可以添加该小组ClickHandler
并且瞧。 FocusPanel
也实现了HasAllKeyHandlers
,这意味着您也可以使用KeyDown / UpHandlers等。