开发者

gwt get array button value

开发者 https://www.devze.com 2023-01-03 04:23 出处:网络
My gwt project have flexTable show data of image and button on each row and coll. But my button won\'t work properly. this is my current code:

My gwt project have flexTable show data of image and button on each row and coll.

But my button won't work properly. this is my current code:

private Button[] b = new Button[]{new Button("a"),...,new Button("j")};
private int z=0;
...
public void UpdateTabelGallery(JsArray str){
    for(int i=0; i str.length(); i++){
    b[i].setText(str.gettitle());                               
    UpdateTabelGallery(str.get(i));                   
  }
}

public void UpdateTabelGallery(GalleryData str){
  Image img = new Image();  
  img.setUrl(str.getthumburl());  

  HTML himage= new HTML("a href="+str.geturl()+">"+ img +"/a>" + b[z] );                                                        
  TabelGaleri.setWidget(y, x, himage);

//is here th right place?
  b[z].addClickHandler(new Click开发者_如何学PythonHandler(){
  @Override
    public void onClick(ClickEvent event) {
      Window.alert("I wan to show the clicked button text" + b[z].getText());               
    }                         
  });

  z++;
}

I'm still confuse where I should put my button handler. With this current code seems the clickhandler didn't work inside a looping. And if I put it outside loop its not working because I need to know which button clicked. I need to get my index button.but how? Is there any option than array button?

thanks


I was using this method me too, then I've created a new Button with an additional argument. When I add the ButtonArg I set also the argument:

Panel.add(new ButtonArg("B1", i));
...
 // Create a handler for the A-Z buttons
    class MyHandler implements ClickHandler {
        public void onClick(ClickEvent e) {
            ButtonArg btn=(ButtonArg) e.getSource();
            Window.alert("Button Text="+btn.getArgument());
        }
    }


public class ButtonArg extends Button {

int argument;

public ButtonArg(String html, int arg) {
    super(html);
    setArgument(arg);
}

    public int getArgument() {
    return argument;
}

public void setArgument(int argument) {
    this.argument = argument;
}

[...]


The problem is that you refer to 'z' in your click handler, but the value of z changes, so that when your click handler is actually called the value of z is wrong.

You need a local final variable in UpdateTabelGallery which you assign the current value of z to to allow it to be captured by the handler you create. Even better, get rid of z entirely and pass i to UpdateTableGallery:

public void updateTableGallery(GalleryData str, final int i){
  Image img = new Image();  
  img.setUrl(str.getthumburl());  

  HTML himage= new HTML("a href="+str.geturl()+">"+ img +"/a>" + b[i] );                                                        
  TabelGaleri.setWidget(y, x, himage);

//is here th right place?
  b[i].addClickHandler(new ClickHandler(){
  @Override
    public void onClick(ClickEvent event) {
      Window.alert("I wan't to show the clicked button text" + b[i].getText());               
    }                         
  });

}

But what do you expect:

  HTML himage= new HTML("a href="+str.geturl()+">"+ img +"/a>" + b[i] );       

to do? Aside from the incorrect HTML syntax, I don't think adding ypur button to the string will work.


I know this is old, but it didn't look answered and I was looking to do the same thing. Here's one solution:

    public void onModuleLoad() {
    Button[] b=new Button[26];

    RootPanel rp=RootPanel.get("body");

    // Create a handler for the A-Z buttons
    class MyHandler implements ClickHandler {
        public void onClick(ClickEvent e) {
            Button btn=(Button) e.getSource();
            Window.alert("Button Text="+btn.getText());
        }
    }

    MyHandler handler = new MyHandler();

    for(int i=0;i<26;i++) {
        b[i] = new Button(String.valueOf((char)(65+i)));
        b[i].addStyleName("sendButton");
        rp.add(b[i]);
        b[i].addClickHandler(handler);
    }

    SimplePanel sPanel = new SimplePanel();
}
0

精彩评论

暂无评论...
验证码 换一张
取 消