ClickListener for Composite Widget

时间:2009-11-14 20:16:07

标签: java gwt onclick listener

我有一个由文本框和自定义小部件组成的复合小部件,然后将其添加到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);
    }
}

问题:     有没有办法让这个工作?你的建议是什么?

谢谢。

2 个答案:

答案 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等。