0

チェックボックスの配列とそれらの動的クリックハンドラーを生成しようとしましたが、ハンドラーが機能していません。

どんな提案でも大歓迎です。お時間をいただきありがとうございます。

private void addButtonListener() {      
    goButton.addClickHandler(new ClickHandler() {           
        @SuppressWarnings("rawtypes")
        @Override
        public void onClick(ClickEvent arg0) {              
            String strQuery="Select BRANCH_NAME from SAMPLE_ACC_BRANCH where GL_CODE='"+gll_textfield.getText().trim()+"'";
            HibernateImplUtils.getSearchResult(strQuery, new AsyncCallback() {                  
                private int i;
                @Override
                public void onFailure(Throwable arg0) 
                {arg0.printStackTrace();}
                @Override
                public void onSuccess(Object arg0) {                        
                    System.err.println("Inside Success");
                    List branchNameList=(List) arg0;
                    System.err.println("Branch List:::"+branchNameList);                        
                        for(i=0;i<branchNameList.size();i++){
                            checkbox[i]=new CheckBox((String) branchNameList.get(i));                               
                            vpanel.add(checkbox[i]);
                            checkbox[i].addClickHandler(new ClickHandler() {                                    
                                @Override
                                public void onClick(ClickEvent arg0) {                                      
                                    if(checkbox[i].getValue()){
                                        System.out.println("NAME::::"+checkbox[i].getText());
                                    }
                                    System.out.println("Selected check box ::::"+checkbox[i].getText());
                                }
                            });                                             
                    }                       

                }
            });             

        }
    });

}   
4

2 に答える 2

1

「i」のスコープは危険です。最も簡単な修正は、イベント ハンドラーの「最終」コピーを作成することです。例: "final int i2 = i"

内部クラスは、作成中にインデックス値を必要とする可能性があります。

作成したチェックボックスへの最終的な参照、またはイベント ハンドラーに渡された参照を使用したくなるでしょう (そうすれば、単一のインスタンスを使用することもできます)。

(修正)

于 2014-07-08T10:28:30.733 に答える
0
    final int i2=i;                         
    checkbox[i2].addClickHandler(new ClickHandler() {                                    
      @Override
        public void onClick(ClickEvent arg0) {
        if(checkbox[i2].getValue()){                                           
           System.out.println("NAME::::"+checkbox[i2].getText());
                }

              }
          }); 
于 2014-07-08T13:37:31.390 に答える