2010-06-14 2 views
0

В моем проекте gwt есть flexTable показать данные изображения и кнопки для каждой строки и колла.
Но моя кнопка не будет работать должным образом. это мой текущий код:gwt get array button value

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



Я до сих пор путают, где я должен поместить мой обработчик кнопки. С помощью этого текущего кода кажется, что манипулятор щелчка не работает внутри цикла. И если я ставлю его вне цикла, он не работает, потому что мне нужно знать, какую кнопку нажать. Мне нужно получить свой индекс button.but как? Есть ли опция, кроме кнопки массива?

благодаря

+1

Я не совсем понимаю, что вы хотите достичь - вы хотите использовать одни и те же кнопки при обновлении таблица/изображения? –

+0

Я хочу получить свой индексный массив кнопок. Если я могу получить свой индекс, я могу использовать любой массив, связанный с моими данными, как текст моей кнопки. – user315196

ответ

0

Проблема заключается в том, что вы ссылаетесь на «Z» в обработчике щелчка, но изменяется значение г, так что, когда ваш обработчик щелчка на самом деле называется величина г неправильно.

Вам нужна локальная конечная переменная в UpdateTabelGallery, которую вы назначаете текущему значению 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 в строку будет работать.

+0

Вау, спасибо за образец кода. ты прав. кнопка не работала, если я поместил ее в HTML. – user315196

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

[...]