2012-04-24 1 views
5

Я использую следующий код для нарастающих в в JDialog с javax.swing.Timer:а стройки JDialog непрозрачность Таймера

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 красиво утрачен в с желаемым эффектом, но, наконец, IllegalArgumentException происходит говоря, что:

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

Но проблема я не буду далеко сюда i = 0.8F так как это может быть незаконным аргумент ??
Исключение происходит по строке: setOpacity(i);

Любые предложения? Решения?

+1

Я предлагаю пересмотреть свой код в качестве 'i' вы изменяете, вероятно, не один вы ожидаете. Это не может быть переменной 'final float i = 0.0F;', так как это было сделано «final» – Robin

+0

извините за это @Robin, это моя ошибка ввода, отредактированная на этот раз .. вы видите, что я сделал это окончательный, чем он выдает «ошибку компилятора», а не «исключение» ..thanks для указания его. :) – Asif

+0

Могу ли я спросить, что это за метод «setOpacity»? Я также пытаюсь реализовать диалог fadein/out. –

ответ

8

Ваша проблема в том, что вы имеете дело с числами с плавающей запятой, а == не работает с ними, так как вы не можете точно изобразить 0,8 в плавающей запятой, и поэтому ваш таймер никогда не остановится.

Использование >=. Или еще лучше, используйте только 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(); 
+1

Ничего себе! thats это ... легко и полезно .. очень много! Ну, еще одна вещь, законно ли это делать? Я имею в виду использование диалога «Таймер» и «затухание», я надеюсь, что это не противоречит стандартным стандартам кодирования Swing? – Asif

+0

Я не знаю никаких «стандартов» в отношении этого или любых стандартов Swing для этой меры, просто предостережения относительно резьбы, и я не вижу в этом нисходящего потока. –

+0

Да, моя забота о том, качая Threading Model и вещи EDT, я надеюсь, что это не мешает им, потому что мне очень нравится эта небольшая настройка :-) – Asif