Увеличение переменной до определённого момента, а после - снижение

166
25 сентября 2018, 06:40

Есть слушатель кнопок, при нажатии на одну из кнопок значение переменной x должно увеличиваться до определённого значения (60), а после снижаться до 0. Вот как я попытался это сделать:

if(x >= 60){
    while(x >= 0){
        x -= y;
    }
}else{
    x += y;
}

Казалось бы всё нормально, но есть одна проблема. Переменная x используется в actionPerformed (реализация метода из класса ActionListener) методом repaint().

Сама суть проблемы: при прибавлении картинка идёт плавно (постепенно прибавляя y, а не выдавая сразу конечный результат - 60), а когда понижается выходит лишь конечный результат (0), что не удивительно, ибо это цикл (в связи с тем, что он не обращает внимание на всё остальное, пока не закончит выполнение). Т.е. нужно как-то отслеживать изменение переменной в цикле или впихнуть туда действие (repaint)

Так вот вопрос, возможно ли как-то сделать "ссылку" на реализацию слушателя или repaint() (через объект уже пытался - бесполезно)? Либо нужна какая-то формула, по которой он сначала будет прибавлять до определённого момента, а после снижать (в идеале). Готов пробовать Ваши варианты, потому что сам я уже не знаю что делать

Answer 1

Если картинка увеличивается нормально, значит весь этот код так или иначе уже выполняется в цикле. И проблема как раз в том, что во время уменьшения не происходит прорисовка, в то время как при увеличении да. Вдаваться в подробности долго,просто надо отслеживать стадию другой переменной.

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;
    }
}
Answer 2
int x = 0;
int step = 1;
do {
    x += step;
    if (x == 60) {
        step *= -1;
    }
} (while x > 0);
READ ALSO
Вывод текста в TextView в AsyncTask

Вывод текста в TextView в AsyncTask

Ниже представляю AsyncTask, который находится в адаптереВ doInBackground() выполняется парсинг с помощью Jsoup, далее в onPostExecute() устанавливается текст...

192
Выгрузка XML из Oracle c помощью java (spring)

Выгрузка XML из Oracle c помощью java (spring)

Собственно есть spring приложение которое вызывает функцию возвращающую xml в clob'еСамо взаимодействие с базой данных происходит через DAO (java классы...

158
JavaFX Notifications эффект во время отображения

JavaFX Notifications эффект во время отображения

Подскажите, возможно ли убрать эффект в время отображения уведомления?

182
netty java закрытие сервера из хендлера

netty java закрытие сервера из хендлера

Как мне в netty выключить сервер из хендлера?

141