2015-05-27 3 views
0

Я хочу создать метод (addButton), который бы все сделал с помощью конструктора, но взяв некоторые переменные. Теперь я застрял в причине ошибки, которая говорит, что мне нужно сделать логическое окончание, но я не хочу этого делать. Как мне это сделать?Переменная LibGDX, доступная изнутри внутреннего класса

Вот код:

public void addButton(Table table,String key,boolean bool){ 

     atlas=new TextureAtlas(Gdx.files.internal("buttons/buttons.pack")); 
     skin=new Skin(atlas); 
     buttonStyle.up=skin.getDrawable(key+".up"); 
     buttonStyle.down=skin.getDrawable(key+".down"); 

     button=new Button(buttonStyle); 
     button.addListener(new ClickListener(){ 
      @Override 
      public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 
       bool=true; //this boolean 
       return super.touchDown(event, x, y, pointer, button); 
      } 

      @Override 
      public void touchUp(InputEvent event, float x, float y, int pointer, int button) { 
       bool=false; //and this 
       super.touchUp(event, x, y, pointer, button); 
      } 
     }); 
     table1.add(button); 

    } 
+0

В чем проблема с, что делает его 'final'? Многие люди делают это, даже не будучи «вынуждены» делать это. Кроме того, пожалуйста, разместите только соответствующий код ... – noone

+0

Выполнение этого окончательного решения сделает его неприемлемым, или я не прав? –

+0

То, как вы это делаете, не работает, вы ничего не меняете. Вы должны прочитать о том, как работают параметры в Java. – noone

ответ

1

Есть много способов сделать это. Если вы просто хотите знать, нажата ли кнопка или нет, вы можете использовать Button.isPressed(), потому что Button уже отслеживает это.

Если вы хотите сделать что-то еще, вам будет лучше создать свой собственный MyButton который extends Button. MyButton может иметь поле private boolean bool и добавить, что ClickListener в конструктор. Затем этот прослушиватель кликов сможет получить доступ к полю кнопки через MyButton.this.bool и может изменить его.

public class MyButton extends Button { 

private boolean bool; 

public MyButton(...) { 

    addListener(new ClickListener(){ 
     @Override 
     public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 
      MyButton.this.bool=true; 
      return super.touchDown(event, x, y, pointer, button); 
     } 

     @Override 
     public void touchUp(InputEvent event, float x, float y, int pointer, int button) { 
      MyButton.this.bool=false; 
      super.touchUp(event, x, y, pointer, button); 
     } 
    }); 
} 
} 

Другим решением было бы сохранить текущую установку, но завернуть элементарное значение в другом классе:

public class DataWrapper { 
    public boolean bool; 
} 

public void addButton(Table table,String key, final DataWrapper data) { 
    ... 

    button=new Button(buttonStyle); 
    button.addListener(new ClickListener(){ 
     @Override 
     public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 
      data.bool=true; 
      return super.touchDown(event, x, y, pointer, button); 
     } 

     @Override 
     public void touchUp(InputEvent event, float x, float y, int pointer, int button) { 
      data.bool=false; 
      super.touchUp(event, x, y, pointer, button); 
     } 
    }); 
    table1.add(button); 
} 
+0

Но будет ли это работать, потому что я хочу этот метод, чтобы я мог легко создавать новые кнопки? –

+0

Я не понимаю ваш вопрос. – noone

+0

Ок, я нашел другое решение :) Вместо логического я прошел в Button и из другого класса только что протестировал buttonName.isPressed(); –

Смежные вопросы