Setting JDialog opacity by Timer

fadein, java, javax.swing.timer, jdialog, swing

Solution

Your problem is that you're dealing with floating point numbers and `==` doesn't work well with them since you cannot accurately depict 0.8 in floating point, and so your Timer will never stop.

Use `>=`. Or better still, only use int.

i.e.,

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();

Problem

I am using the following code to fade-in a `JDialog` with a `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(); ``` The `Dialog` is nicely faded-in with the desired effect but at last, an `IllegalArgumentException` Occurs saying that: ``` The value of opacity should be in the range [0.0f .. 1.0f] ``` But the problem is I am not going far fro `i = 0.8F` so how can it be a illegal argument?? Exception occur at line : `setOpacity(i);` Any suggestions? Solutions?

Original source

Related problems