通过Timer设置JDialog不透明度

Asi*_*sif 5 java swing jdialog fadein javax.swing.timer

我使用下面的代码淡入一个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();
Run Code Online (Sandbox Code Playgroud)

Dialog是很好的褪色,与预期的效果,但在最后一个IllegalArgumentException出现说:

 The value of opacity should be in the range [0.0f .. 1.0f]
Run Code Online (Sandbox Code Playgroud)

但问题是我不是很远,i = 0.8F所以它怎么可能是一个非法的论点?
行发生异常:setOpacity(i);

有什么建议?解决方案?

Hov*_*els 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();
Run Code Online (Sandbox Code Playgroud)