gwt获取数组按钮值

gwt获取数组按钮值,gwt,Gwt,我的gwt项目在每行和每列上都有flexTable显示图像和按钮数据。 但是我的按钮不能正常工作。这是我当前的代码: 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].setTe

我的gwt项目在每行和每列上都有flexTable显示图像和按钮数据。
但是我的按钮不能正常工作。这是我当前的代码:

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++; } 私有按钮[]b=新按钮[]{new Button(“a”),…,new Button(“j”)}; 私有整数z=0; ... 公共无效更新标签库(JsArray str){ 对于(int i=0;i str.length();i++){ b[i].setText(str.gettitle()); 更新标签库(str.get(i)); } } 公共无效更新标签库(GalleryData街){ 图像img=新图像(); setUrl(str.getthumburl()); HTML himage=newhtml(“a href=“+str.geturl()+”>“+img+”/a>“+b[z]); TabelGaleri.setWidget(y,x,himage); //这是正确的地方吗? b[z].addClickHandler(新的ClickHandler(){ @凌驾 公共作废一次点击(点击事件){ Window.alert(“我想显示单击的按钮文本”+b[z].getText()); } }); z++; }

我仍然不知道我应该把我的按钮处理器放在哪里。在当前代码中,clickhandler似乎无法在循环中工作。如果我把它放在循环外,它就不工作了,因为我需要知道哪个按钮被点击了。我需要找到我的索引按钮,但是怎么做呢?除了“阵列”按钮,还有其他选项吗?


谢谢

问题在于,您在单击处理程序中引用了“z”,但z的值发生了变化,因此当您的单击处理程序实际被调用时,z的值是错误的

在UpdateTableGallery中需要一个局部final变量,将当前值z指定给该变量,以允许创建的处理程序捕获该变量。更妙的是,完全去掉z并将i传递给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按钮不起作用。

我知道这是一个很老的方法,但它看起来没有得到回答,我也在寻找同样的方法。这里有一个解决方案:

    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();
}
模块加载()上的公共void{
按钮[]b=新按钮[26];
RootPanel rp=RootPanel.get(“body”);
//为a-Z按钮创建处理程序
类MyHandler实现ClickHandler{
单击公共无效(单击事件e){
按钮btn=(按钮)e.getSource();
Window.alert(“按钮文本=“+btn.getText());
}
}
MyHandler=新的MyHandler();

对于(inti=0;i我也在使用这个方法,然后我创建了一个带有附加参数的新按钮。 当我添加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;
}

[……]

我不太明白您想要实现什么-刷新表/图像时是否要重复使用相同的按钮?我想获取我的按钮索引数组。如果我可以获取索引,我可以访问任何连接到我的数据的数组,如我的按钮文本。哇,感谢您提供的示例代码。您是对的。如果我将其放入,则按钮无法工作HTML。