我使用以下代码淡入 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);
有什么建议吗?溶液
答案 0 :(得分:8)
你的问题是你正在处理浮点数而==
与它们不兼容,因为你无法准确地描绘浮点数为0.8,所以你的Timer永远不会停止。
使用>=
。或者更好的是,只使用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();