Установка непрозрачности JDialog по таймеру

Я использую следующий код для постепенного JDialog с javax.swing.Timer:

    float i = 0.0F;
    final Timer timer = new Timer(50, null);
    timer.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            if (i == 0.8F){
                timer.stop();
            }
            i = i + 0.1F;
            setOpacity(i);
        }
    });
    timer.start();

Dialog приятно потемнел с желаемым эффектом, но, наконец, IllegalArgumentException Происходит, сказав, что:

 The value of opacity should be in the range [0.0f .. 1.0f]

Но проблема в том, что я далеко не уйду i = 0.8F так как это может быть незаконным аргументом??
Исключение происходит в строке: setOpacity(i);

Какие-либо предложения? Решения?

1 ответ

Решение

Ваша проблема в том, что вы имеете дело с числами с плавающей запятой и == не работает с ними, так как вы не можете точно изобразить 0,8 с плавающей точкой, и поэтому ваш таймер никогда не остановится.

использование >=, Или, что еще лучше, используйте только int.

т.е.

int timerDelay = 50; // msec
new Timer(timerDelay, new ActionListener() {
    private int counter = 0;

    @Override
    public void actionPerformed(ActionEvent e) {
        counter++;
        if (counter == 10){
            ((Timer)e.getSource()).stop();
        }
        setOpacity(counter * 0.1F);
    }
}).start();
Другие вопросы по тегам