【问题标题】:ClickListener for Composite Widget复合小部件的 ClickListener
【发布时间】:2009-11-14 20:16:06
【问题描述】:

我有一个由文本框和自定义小部件组成的复合小部件,然后将它们添加到垂直面板中。我使用 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);
    }
}

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

谢谢。

【问题讨论】:

    标签: java gwt onclick listener


    【解决方案1】:

    你必须在你的“Test”复合小部件中实现HasClickHandler接口。它会强制你实现addClickHandler方法。然后你可以添加clickHandler。你可以实现以下所有iterfaces取决于你的要求HasAllFocusHandlers,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 类。如果是这样,您可以添加点击处理程序。它应该可以工作。

    【讨论】:

    • RaphaelJSWidget 是一个将底层 Raphael javascript 转换为小部件的类。我需要绘制形状,因此我正在使用它。我从hydro4ge 项目中得到了这个想法。这是链接:googlewebtoolkit.blogspot.com/2009/09/… 现在我相信我面临的问题是因为这个 raphael,因为我不确定如何将鼠标事件添加到 raphael 画布。有什么建议么?谢谢。
    • 谢谢。是的,我有 RaphelJSWidget 类扩展 Widget,但由于某种原因它不起作用。
    【解决方案2】:

    如何将Composite 包裹在FocusPanel 中,而不是VerticalPanel? (如果您需要布局,可以将VerticalPanel 放在FocusPanel 中,但请确保FocusPanel 是您调用initWidget 的那个)然后您可以将ClickHandler 添加到该面板并瞧。 FocusPanel 也实现了HasAllKeyHandlers,这意味着你也可以获得 KeyDown/UpHandlers 等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多