Как многократно обновлять JLabel с увеличивающейся задержкой, пока задержка не достигнет предела?

Я пытаюсь обновить свой JLabel текущими номерами вращающегося колеса с увеличивающейся задержкой, которая представляет замедляющееся колесо. Я пробовал Thread.sleep(), Timer и invokeLater(), но, должно быть, я делаю что-то ужасно неправильное, так как ничего из того, что я пробовал за последние несколько дней, не сработало. Thread.sleep приводит к тому, что графический интерфейс обновляет только последнюю вещь, Timer игнорирует задержку и печатает результаты до завершения вращения, и я не смог заставить invokeLater() вообще обновить JLabel. Что я должен делать?

public void spin(int wheelSize, int initialDelay, int finalDelay, int delayIncrement, WheelCallback callback) {

        /**
         * Begins the spin on a random number within the wheelSize
         */
        Random randomNum = new Random();
        int currentNum = randomNum.nextInt((wheelSize - 0) + 1) + 0;
        //frame.setLabel(Integer.toString(currentNum));
        System.out.println(currentNum);
        /**
         * Loops the wheel until the finalDelay is met
         */
        for(int i = initialDelay; i < finalDelay; i += delayIncrement) {
                /**
                 * Causes the delay between numbers
                 */
            try {
                   Thread.sleep(i);
                }
                    catch(InterruptedException e) {
                }

                /**
                 * Increments the number to the next number up on the wheel.
                 * If the number reaches the maximum, it is reset to the minimum
                 */
                currentNum++;
                if(currentNum > wheelSize) {
                    currentNum = 0;
                }

                callback.nextNumber(currentNum, this);
            }       
            callback.result(currentNum, this);
            calculateResult(currentNum);
    }




public void nextNumber(int nextNumber, GameEngine engine) {
        frame.setLabel(Integer.toString(nextNumber));
    }

person user3693590    schedule 31.05.2014    source источник


Ответы (1)


Вы можете использовать таймер Swing, т.к. описано в этой теме: как каждый раз обновлять jLabel циклом while с задержкой

person mrClark    schedule 31.05.2014