2010-06-14 8 views
0

Mon projet gwt a flexTable afficher les données de l'image et le bouton sur chaque ligne et coll.
Mais mon bouton ne fonctionnera pas correctement. voici mon code actuel:gwt get valeur de bouton de tableau

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



Je confonds toujours où je devrais mettre mon gestionnaire de bouton. Avec ce code actuel semble le clickhandler n'a pas fonctionné à l'intérieur d'une boucle. Et si je le mets en dehors de la boucle, il ne fonctionne pas parce que j'ai besoin de savoir sur quel bouton a cliqué. J'ai besoin de mon index, mais comment? Y at-il une option que le bouton de tableau?

grâce

+1

Je ne comprends pas tout à fait ce que vous voulez atteindre - voulez-vous réutiliser les mêmes boutons lorsque vous actualisez la table/images? –

+0

Je veux obtenir mon tableau d'index de boutons. Si je peux obtenir mon index, je peux accéder à n'importe quel tableau connecté à mes données comme le texte de mon bouton. – user315196

Répondre

0

Le problème est que vous faites référence à « z » dans votre gestionnaire de clic, mais la valeur des changements z, de sorte que lorsque votre gestionnaire de clic est en fait appelé la valeur de z est erronée. UpdateTabelGallery Vous avez besoin d'une variable finale locale dans UpdateTabelGallery à laquelle vous attribuez la valeur actuelle de z to pour permettre sa capture par le gestionnaire que vous créez. Mieux encore, se débarrasser de z entièrement et passer 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());    
    }       
    }); 

} 

Mais qu'attendez-vous:

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

à faire? Mis à part la syntaxe HTML incorrecte, je ne pense pas que l'ajout du bouton ypur à la chaîne fonctionnera.

+0

wow, merci pour l'exemple de code. tu as raison. le bouton ne fonctionnait pas si je le mettais en HTML. – user315196

0

Je sais que c'est vieux, mais il n'a pas l'air répondu et je cherchais à faire la même chose. Voici une solution:

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

J'utilisais moi aussi cette méthode, puis j'ai créé un nouveau bouton avec un argument supplémentaire. Quand j'ajoute le buttonArg je mis aussi l'argument:

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

[...]