Libgdx错误clickListener

时间:2015-01-29 02:28:14

标签: java libgdx clicklistener

我有5个按钮,想要每个按钮都不能打印1,2,3,4,5号。但每个按钮只打印“5”。我的代码有什么问题吗?或者它在libgdx上的错误?我使用libgdx v1.2.0

for (Integer i = 1; i <=5 ; i++){
     tabeldalam=new Table(skin);
     tabeldalam.row();
     tabeldalam.add(new Label("GAmbar :", skin)).height(100).width(100);
     tabeldalam.row();
     tabeldalam.add(new Label("Harga",skin)).height(30).width(100);
     tabeldalam.row();

     TextButton nextbutton = new TextButton("Beli",skin);
     nextbutton.setWidth(100);
     nextbutton.setHeight(20);
     nextbutton.addListener(new ClickListener() {
         @Override
         public void clicked(InputEvent event, float x, float y) {
             beli(i);
         }
     });
     tabeldalam.add(nextbutton).height(20).width(100);

     tabelLuar= new Table(skin);
     tabelLuar.add(tabeldalam).width(100).height(150);
 }

private void beli(Integer i){
    text2.setText(i.toString());
}

2 个答案:

答案 0 :(得分:0)

试试这个简单的例子:

... // 更改代码 addListener

nextbutton.addListener(new ClickListenerOverflow(i) {

         @Override
         public void clicked(InputEvent event, float x, float y) {
             beli(n);
         }
     });

... //

在您的班级中添加此代码:

private class ClickListenerOverflow extends ClickListener{

    int n;

    public ClickListenerOverflow(int n){
        this.n = n;
    }

}

当您点击通话beli (i)时,i则其值为5,后者赢得了for

答案 1 :(得分:0)

为for循环使用int而不是Integer。所有单击侦听器都引用相同的Integer实例,因为它是一个对象而不是一个原语。

对于代码非歧义,我会将变量复制到最终的int变量,并将其用于click侦听器,因此绝对清楚的是每个变量都使用单独的int。

final int index = i;
...
//use index in the ClickListener instead of i