ClickListener для составного виджета - PullRequest
0 голосов
/ 14 ноября 2009

У меня есть составной виджет, состоящий из текстового поля и пользовательского виджета, которые затем добавляются в вертикальную панель. Я создал этот виджет с помощью Raphael JS.

Теперь я хочу, чтобы этот композитный виджет распознавал как событие нажатия, так и событие 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 ]

1 голос
/ 15 ноября 2009

Вы должны реализовать интерфейс HasClickHandler в своем составном виджете «Тест». Это заставит вас реализовать метод addClickHandler. Затем вы можете добавить clickHandler. Вы можете реализовать следующие все интерфейсы в зависимости от ваших требований: Если вы хотите добавить списки кликов для CustomShapeRet, то также реализуйте эти интерфейсы. Для примера кода посмотрите следующую ветку:

Как добавить MouseEvents в 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. Если это правда, вы можете добавить обработчик кликов. Это должно работать.

0 голосов
/ 15 ноября 2009

Как насчет упаковки Composite в FocusPanel вместо VerticalPanel? (вы можете поместить VerticalPanel в FocusPanel, если вам нужен макет, но убедитесь, что FocusPanel - это тот, который вы называете initWidget). Затем вы можете просто добавить ClickHandler к этой панели и вуаля. FocusPanel также реализует HasAllKeyHandlers, то есть вы получаете KeyDown / UpHandlers и т. Д.

...