我的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在循环中不起作用。如果我把它放在外面循环它不工作,因为我需要知道点击了哪个按钮。我需要获取索引按钮。但是如何?除阵列按钮有什么选择吗?
感谢
答案 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();
}