Есть слушатель кнопок, при нажатии на одну из кнопок значение переменной x должно увеличиваться до определённого значения (60), а после снижаться до 0. Вот как я попытался это сделать:
if(x >= 60){
while(x >= 0){
x -= y;
}
}else{
x += y;
}
Казалось бы всё нормально, но есть одна проблема. Переменная x используется в actionPerformed (реализация метода из класса ActionListener) методом repaint().
Сама суть проблемы: при прибавлении картинка идёт плавно (постепенно прибавляя y, а не выдавая сразу конечный результат - 60), а когда понижается выходит лишь конечный результат (0), что не удивительно, ибо это цикл (в связи с тем, что он не обращает внимание на всё остальное, пока не закончит выполнение). Т.е. нужно как-то отслеживать изменение переменной в цикле или впихнуть туда действие (repaint)
Так вот вопрос, возможно ли как-то сделать "ссылку" на реализацию слушателя или repaint() (через объект уже пытался - бесполезно)? Либо нужна какая-то формула, по которой он сначала будет прибавлять до определённого момента, а после снижать (в идеале). Готов пробовать Ваши варианты, потому что сам я уже не знаю что делать
Если картинка увеличивается нормально, значит весь этот код так или иначе уже выполняется в цикле. И проблема как раз в том, что во время уменьшения не происходит прорисовка, в то время как при увеличении да. Вдаваться в подробности долго,просто надо отслеживать стадию другой переменной.
private boolean zoomIn = true; // поле для отслеживания состояния.
// если true - то изображения в стадии увеличения
// false - уменьшения
...
// в методе
if(zoomIn){
if(x < 60){
x+=y;
}else{
zoomIn = false;
}
}else{
if(x > 0){
x-=y;
}else{
zoomIn = true;
}
}
int x = 0;
int step = 1;
do {
x += step;
if (x == 60) {
step *= -1;
}
} (while x > 0);
Сборка персонального компьютера от Artline: умный выбор для современных пользователей