Установка непрозрачности 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();