Обработка события клика на ленте SmartGWT RibbonBar

У меня есть лента с 4 кнопками. Теперь при нажатии каждой кнопки я хочу выполнить какое-то действие. Но проблема в том, как мне узнать, какая кнопка нажата. Может ли кто-нибудь помочь мне. Ниже приведен мой код и скриншот. Кстати, я использую кнопку вместо IconButton, как показано на витрине. Это нормально, если я использую эту кнопку??.

введите здесь описание изображения

public class DBilling implements EntryPoint
{

@Override
public void onModuleLoad()
{
    VLayout vLayout = new VLayout();
    vLayout.setWidth100();

    RibbonBar ribbonBar = new RibbonBar();
    ribbonBar.setLeft(0);
    ribbonBar.setTop(0);
    ribbonBar.setWidth100();

    ribbonBar.setMembersMargin(2);
    ribbonBar.setLayoutMargin(2);

    RibbonGroup orderGroup = new RibbonGroup();
    orderGroup.setTitle("New Order");
    orderGroup.setRowHeight(60);
    orderGroup.addControl(getButton("Order", "order", false));

    RibbonGroup reportGroup = new RibbonGroup();
    reportGroup.setTitle("Report");
    reportGroup.setRowHeight(60);
    reportGroup.addControl(getButton("Report", "report", false));

    RibbonGroup productGroup = new RibbonGroup();
    productGroup.setTitle("New Product");
    productGroup.setRowHeight(60);
    productGroup.addControl(getButton("Product", "cookies", false));

    RibbonGroup systemGroup = new RibbonGroup();
    systemGroup.setTitle("System");
    systemGroup.setRowHeight(60);
    systemGroup.addControl(getButton("System", "system", false));

    ribbonBar.addMember(orderGroup);
    ribbonBar.addMember(reportGroup);
    ribbonBar.addMember(productGroup);
    ribbonBar.addMember(systemGroup);

    vLayout.addChild(ribbonBar);
    vLayout.draw();

}

private Button getButton(String title, String iconName, boolean vertical)
{
    final Button cssButton = new Button(title);  
    cssButton.setShowRollOver(true);  
    cssButton.setShowDisabled(true);  
    cssButton.setShowDown(true);  
    cssButton.setIcon(iconName + ".png"); 
    cssButton.setIconSize(32);
    cssButton.setWidth(120);
    cssButton.addClickHandler(new ClickHandler()
    {

        @Override
        public void onClick(ClickEvent event)
        {

            SC.say(event.getSource().toString());
        }
    });

    return cssButton;
}

person ZAJ    schedule 03.03.2015    source источник


Ответы (1)


Непроверено, но я думаю, что вам нужно что-то вроде этого:

public class DBilling implements EntryPoint
{

    private RibbonBar ribbonBar;

    @Override
    public void onModuleLoad()
    {
        VLayout vLayout = new VLayout();
        vLayout.setWidth100();

        this.ribbonBar = new RibbonBar();
        this.ribbonBar.setLeft(0);
        this.ribbonBar.setTop(0);
        this.ribbonBar.setWidth100();

        this.ribbonBar.setMembersMargin(2);
        this.ribbonBar.setLayoutMargin(2);

        RibbonGroup orderGroup = new RibbonGroup();
        orderGroup.setTitle("New Order");
        orderGroup.setRowHeight(60);
        orderGroup.addControl(getButton("Order", "order", false));

        RibbonGroup reportGroup = new RibbonGroup();
        reportGroup.setTitle("Report");
        reportGroup.setRowHeight(60);
        reportGroup.addControl(getButton("Report", "report", false));

        RibbonGroup productGroup = new RibbonGroup();
        productGroup.setTitle("New Product");
        productGroup.setRowHeight(60);
        productGroup.addControl(getButton("Product", "cookies", false));

        RibbonGroup systemGroup = new RibbonGroup();
        systemGroup.setTitle("System");
        systemGroup.setRowHeight(60);
        systemGroup.addControl(getButton("System", "system", false));

        this.ribbonBar.addMember(orderGroup);
        this.ribbonBar.addMember(reportGroup);
        this.ribbonBar.addMember(productGroup);
        this.ribbonBar.addMember(systemGroup);

        vLayout.addChild(this.ribbonBar);
        vLayout.draw();

    }

    private Button getButton(String title, String iconName, boolean vertical)
    {
        final Button cssButton = new Button(title);  
        cssButton.setShowRollOver(true);  
        cssButton.setShowDisabled(true);  
        cssButton.setShowDown(true);  
        cssButton.setIcon(iconName + ".png"); 
        cssButton.setIconSize(32);
        cssButton.setWidth(120);
        cssButton.addClickHandler(new ClickHandler()
        {

            @Override
            public void onClick(ClickEvent event)
            {
                RibbonBar a;
                for(Canvas b : a.getMembers()){
                    RibbonGroup c=(RibbonGroup)b;
                    for(Canvas d : c.getControls()){
                        Button e = (Button)d;
                        if(e.equals(event.getSource()))
                            SC.say(e.getTitle());
                    }
                }

                SC.say(event.getSource().toString());
            }
        });

        return cssButton;
    }

}

или действительно, если вы всегда знаете, что это будет Button, просто преобразуйте event.getSource() в Button, тогда вы можете получить заголовок кнопки, например ((Button)event.getSource()).getTitle()

person Motes    schedule 05.03.2015