gwt获取数组按钮值

时间:2010-06-14 11:21:43

标签: gwt

我的gwt项目有flexTable显示每行和coll的图像和按钮数据 但我的按钮将无法正常工作。这是我目前的代码:

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 ClickHandler(){
  @Override
    public void onClick(ClickEvent event) {
      Window.alert("I wan to show the clicked button text" + b[z].getText());               
    }                         
  });

  z++;
}



我仍然混淆应该把我的按钮处理程序放在哪里。使用此当前代码似乎clickhandler在循环中不起作用。如果我把它放在外面循环它不工作,因为我需要知道点击了哪个按钮。我需要获取索引按钮。但是如何?除阵列按钮有什么选择吗?

感谢

3 个答案:

答案 0 :(得分:1)

我也使用这种方法,然后我创建了一个带有附加参数的新Button。 当我添加ButtonArg时,我还设置了参数:

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;
}

[...]

答案 1 :(得分:0)

问题是你在点击处理程序中引用了'z',但是z的值发生了变化,所以当你实际调用你的点击处理程序时,z的值是错误的。

您需要在UpdateTabelGallery中使用本地最终变量,您可以将z的当前值分配给它,以允许您创建的处理程序捕获它。更好的是,完全摆脱z并将我传递给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());               
    }                         
  });

}

但你期待什么:

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

要做什么?除了不正确的HTML语法之外,我不认为在字符串中添加ypur按钮会起作用。

答案 2 :(得分:0)

我知道这已经过时了,但看起来并没有回答,我也想做同样的事情。这是一个解决方案:

    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();
}