GWT получить значение кнопки массива - PullRequest
0 голосов
/ 14 июня 2010

В моем проекте 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++;
}



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

спасибо

Ответы [ 3 ]

1 голос
/ 12 августа 2012

Я тоже использовал этот метод, затем создал новую кнопку с дополнительным аргументом. Когда я добавляю 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;
}

[...]

0 голосов
/ 04 сентября 2011

Я знаю, что это старо, но это не выглядело как ответ, и я хотел сделать то же самое.Вот одно из решений:

    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();
}
0 голосов
/ 17 июня 2010

Проблема в том, что вы обращаетесь к 'z' в вашем обработчике кликов, но значение z изменяется, так что когда ваш обработчик кликов действительно вызывается, значение z неверно.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...