5

我正在使用以下代码来淡入a :JDialogjavax.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很好地淡入了预期的效果,但最后,一个OccursIllegalArgumentException说:

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

但问题是我不会走得太远i = 0.8F,那怎么可能是非法的争论呢?
异常发生在行:setOpacity(i);

有什么建议么?解决方案?

4

1 回答 1

8

您的问题是您正在处理浮点数并且==不能很好地处理它们,因为您无法准确地用浮点数描述 0.8,因此您的 Timer 永远不会停止。

使用>=. 或者更好的是,只使用 int。

IE,

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();
于 2012-04-24T02:14:50.360 回答