【问题标题】:gwt get array button valuegwt 获取数组按钮值
【发布时间】:2011-03-03 11:32:20
【问题描述】:

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

私有按钮[] b = new Button[]{new Button("a"),...,new Button("j")}; 私人int z = 0; ... 公共无效更新TabelGallery(JsArray str){ for(int i=0; i str.length(); i++){ b[i].setText(str.gettitle()); UpdateTabelGallery(str.get(i)); } } 公共无效UpdateTabelGallery(GalleryData str){ 图片 img = new Image(); img.setUrl(str.getthumburl()); HTML himage= new HTML("a href="+str.geturl()+">"+ img +"/a>" + b[z] ); TabelGaleri.setWidget(y, x, himage); //这里是正确的地方吗? b[z].addClickHandler(新 ClickHandler(){ @覆盖 公共无效 onClick(ClickEvent 事件){ Window.alert("我想显示点击的按钮文本" + b[z].getText()); } }); z++; }



我仍然很困惑我应该把我的按钮处理程序放在哪里。使用此当前代码,clickhandler 似乎无法在循环中工作。如果我把它放在循环之外,它就不起作用,因为我需要知道点击了哪个按钮。我需要得到我的索引按钮。但是如何?除了数组按钮还有其他选择吗?

谢谢

【问题讨论】:

  • 我不太明白您想要实现什么 - 您想在刷新表格/图像时重复使用相同的按钮吗?
  • 我想获取我的按钮索引数组。如果我能得到我的索引,我就可以访问任何连接到我的数据的数组,比如我的按钮的文本。

标签: gwt


【解决方案1】:

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

[...]

【讨论】:

    【解决方案2】:

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

    您需要 UpdateTabelGallery 中的一个局部 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 按钮不会起作用。

    【讨论】:

    • 哇,感谢您的示例代码。你说得对。如果我把它放在 HTML 中,这个按钮就不起作用了。
    【解决方案3】:

    我知道这是旧的,但它看起来没有回答,我想做同样的事情。这是一个解决方案:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 2017-02-06
      • 2018-12-03
      • 2011-03-28
      • 2020-12-04
      • 1970-01-01
      • 2013-10-14
      相关资源
      最近更新 更多