2012-04-24 21 views
5

Estoy utilizando el código siguiente para fundido de entrada un JDialog con un javax.swing.Timer:Ajuste JDialog opacidad por temporizador

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

El Dialog está muy bien descolorido con el efecto deseado, pero al fin, un IllegalArgumentException se produce diciendo que:

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

pero el problema es que no voy mucho vaivén i = 0.8F así ¿cómo puede ser un argumento ilegal ??
Se producen excepciones en la línea: setOpacity(i);

¿Alguna sugerencia? Soluciones?

+1

le sugiero que revise su código como el 'I' está modificando no es probablemente la que usted espera. No puede ser la variable 'flotación final i = 0.0F;' como la que se ha hecho 'final' – Robin

+0

disculpa por eso @Robin, es solo un error de tipeo mío, editado esta vez ... como ves si lo logré final que arroja un 'error de compilador' en lugar de' excepción' .. gracias por señalarlo :) :) – Asif

+0

¿Puedo preguntar qué es este método de "setOpacity"? Estoy intentando implementar el diálogo fadein/out también. –

Respuesta

8

Su problema es que está tratando con números de coma flotante y == no funciona bien con ellos ya que no puede representar con precisión 0.8 en coma flotante, por lo que su temporizador nunca se detendrá.

Use >=. O mejor aún, solo use int.

es decir,

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

¡Guau! eso es ... fácil y útil ... ¡muchas gracias! Bueno, una cosa más, ¿es legal hacer esto? Me refiero a utilizar el temporizador y el diálogo de desvanecimiento, espero que no vaya en contra de los estándares estándar de codificación Swing. – Asif

+0

No conozco ningún "estándar" con respecto a esto, o cualquier estándar de Swing para esa medida, solo advertencias con respecto al enhebrado, y no veo esto como pisando hilos. –

+0

sí, mi preocupación es con el balanceo de Threading Model y EDT cosas, espero que no les moleste, porque me gusta mucho este pequeño toque mío :-) – Asif