2013-04-05 95 views
2

有没有办法在GWT中使用Clickhandler接口来构建自定义子类?我需要ClickHandlers,它应该在每次点击时作出反应。实现这种行为是不是一个执行clickHandler事件的问题,但是这将是巨大的,如果没有这个代码片断添加到每个单独的列表框元素:自定义ClickHandler类

boolean ingoreClick; 
lastSelection = -1 ; 
listBox.addClickHandler(new ClickHandler() { 

    @Override 
    public void onClick(ClickEvent event) { 

     if (!ignoreClick) { 
      lastSelection = listBox.getSelectedIndex(); 
     } 
     ignoreClick = !ignoreClick;  
    } 
}); 

现在想象一下,有ListBox1中,listbox2和等等。

回答

1

嗯,这是很简单的,由马诺洛答案基本上解决了它,你只需要提高一点点:

public abstract class EvenClickHandler implements ClickHandler { 
    private boolean eventClick= true; 

    public void onClick(ClickEvent event) { 
     if (eventClick = !eventClick) { 
      onEvenClick(event); 
     } 
    } 


    protected abstract void onEvenClick(ClickEvent e); 

} 

... 

listBox.addClickHandler(new EvenClickHandler(){ 

    protected void onEvenClick(ClickEvent e){ 
     lastSelection = listBox.getSelectedIndex(); 
    } 

}); 
+0

工作得很好,谢谢! – Akkusativobjekt 2013-04-05 11:55:29

+0

我将自定义处理程序的实现更改为: 'ListBox lb; \t int lastSelection = -1; (lastSelection!= lb.getSelectedIndex()){ \t \t \t onSecondClick(event); \t \t lastSelection = lb.getSelectedIndex(); \t}' lb是listbox的一个实例。所以只有当列表框的选定项发生变化时才会触发一个事件。上述方法在某些情况下工作不正确。 – Akkusativobjekt 2013-04-08 07:47:07

1

是的,因为Clickhandler是和接口,您可以在自定义的类中实现任何行为并在任何地方使用它。

public class MyClickHancler implements ClickHandler { 
    boolean first = false; 
    String name; 

    public MyClickHancler(String name) { 
     this.name = name; 
    } 

    public void onClick(ClickEvent event) { 
     if (first = !first) { 
     System.out.println("First click on " + name); 
     } else { 
     System.out.println("Second click on " + name); 
     } 
    } 
    } 

    [...] 

    widget1.addClickHandler(new MyClickHancler("widget-1")); 
    widget2.addClickHandler(new MyClickHancler("widget-2")); 
+1

首先谢谢您的回答。我知道我可以用这种方式实现这个接口,但在这种情况下,这并不能帮助我。通常,我使用函数clickhandler一类这样的: 'listBox.addClickHandler(新clickHandler事件(){ \t \t \t \t \t \t @覆盖 \t \t \t公共无效的onClick(最终ClickEvent事件){ // DOSTUFF \t \t \t \t} \t \t \t} \t \t});' 我需要在这个类中处理事件,而不是在实现点击处理器的类中。 – Akkusativobjekt 2013-04-05 08:46:53

+0

对不起,我错过了,但我一直没有关注,你可以编辑你的问题,并粘贴你想工作的代码 – 2013-04-05 09:45:20