2012-04-24 19 views
5

Używam następujący kod do Fade-in w JDialog z javax.swing.Timer:ustawienie JDialog krycie przez 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 jest ładnie wyblakłe-in z pożądanego efektu, ale w końcu, IllegalArgumentException występuje mówiąc, że:

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

Ale problem jest nie zamierzam daleko fro i = 0.8F tak jak to może być nielegalne argumentem ??
Występuje wyjątek w linii: setOpacity(i);

Wszelkie sugestie? Rozwiązania?

+1

Proponuję przejrzeć kod jako 'I' jesteś modyfikacji nie jest chyba jeden z oczekiwaniami. Nie może to być zmienna 'final float i = 0.0F;', ponieważ została wykonana 'final' – Robin

+0

przykro mi z tego @Robin, jest to tylko mój błąd w pisaniu, edytowany tym razem ... czy widzisz, czy zrobiłem to ostateczny niż rzut "błąd kompilatora", a nie 'wyjątek' .. podziękowania za wskazanie .. :) – Asif

+0

Czy mogę zapytać, co to jest ta metoda" setOpacity "? Próbuję też zaimplementować okno dialogowe Fadein/Out. –

Odpowiedz

8

Twój problem polega na tym, że masz do czynienia z liczbami zmiennoprzecinkowymi, a == nie działa dobrze z nimi, ponieważ nie możesz dokładnie przedstawić 0,8 w zmiennoprzecinkowym, a więc Twój Timer nigdy się nie zatrzyma.

Użyj >=. Albo jeszcze lepiej, używaj tylko int.

tj

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

Wow! to jest ... łatwe i użyteczne .. dzięki bardzo! Jeszcze jedno, czy to legalne? Chodzi mi o to, że przy korzystaniu z Timera i zanikającego okna dialogowego mam nadzieję, że nie będzie to sprzeczne ze standardowymi standardami kodowania Swing? – Asif

+0

Nie znam żadnych "standardów" w odniesieniu do tego lub jakichkolwiek standardów Swing dla tego środka, po prostu ogranicza się w odniesieniu do wątków, i nie widzę tego jako stąpania w wątkach. –

+0

Tak, moja troska dotyczy huśtania wątku Model i rzeczy EDT, mam nadzieję, że nie przeszkadza im, bo bardzo lubię ten mały uszczypnięcie :-) – Asif