[SOLVED]Is there a way to get the source component for CallMethodAction?

I’ve set up an ActionButton with a CallMethodAction, like this:

String actions[]= {"action1", "action2", ..."actionN"}

        for (String a : actions) {
            CallMethodAction c=new CallMethodAction(a, this, "index");
            ActionButton b = new ActionButton(c, new ElementId("big.button"));
}

public void index() {
   //which action was actually clicked?
}

So I have a (possibly) long list of buttons, and when index() gets called I need to know “which” button was actually clicked.

(The next problem will be to add some sort of scrolling when there are many of them…)

1 Like

The last bit makes me wonder if what you really want is a ListBox.

…but CallMethodAction wasn’t really meant for what you are using it for. It’s a convenience for wiring up a method to a single action.

In your case, you might be better off just extending Action directly. Depending on what ‘index()’ is doing, you could then either roll that right into action performed or use a property on the action to figure out what index to use.

I’d be curious to know what “action1”, “action2”, etc. are actually doing, though. It could be that embracing Action’s command pattern more completely fits your use-case.

2 Likes

I’m making a wiki of sort, and each button is a link to a page. I could have used just plain HTML but I want to use Lemur styling.

However, it is done!

for (String page: pages) {
            ActionButton b = new ActionButton(new Action() {
                @Override
                public void execute(Button source) {
                    WikiAppstate.this.wiki(page);
                }

                @Override
                public String getName(){
                    return page;
                }

            }, new ElementId("big.button"));
}
3 Likes