2012-04-24 25 views
5

Tôi đang sử dụng đoạn mã sau để fade-in một JDialog với một javax.swing.Timer:Setting JDialog opacity bởi Hẹn giờ

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

Các Dialog là độc đáo nhạt dần trong với hiệu quả mong muốn nhưng cuối cùng, một IllegalArgumentException xảy ra nói rằng:

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

Nhưng vấn đề là tôi không đi xa fro i = 0.8F vậy làm thế nào nó có thể là một cuộc tranh luận bất hợp pháp ??
Ngoại lệ xảy ra tại dòng: setOpacity(i);

Bất kỳ đề xuất nào? Các giải pháp?

+1

Tôi đề nghị xem lại mã của bạn như là 'i' bạn đang thay đổi có lẽ không phải là người bạn mong đợi. Nó không thể là biến 'final float i = 0.0F;' khi biến đó được tạo thành 'final' – Robin

+0

xin lỗi vì @Robin, đó chỉ là lỗi đánh máy của tôi, lần này đã chỉnh sửa .. bạn có thấy nếu tôi tạo nó cuối cùng nó ném một 'lỗi trình biên dịch' thay vì' ngoại lệ'..thanks cho chỉ nó ra .. :) – Asif

+0

Tôi có thể hỏi phương thức "setOpacity" này là gì không? Tôi đang cố gắng thực hiện hộp thoại fadein/out quá. –

Trả lời

8

Vấn đề của bạn là bạn đang xử lý các số dấu phẩy động và == không hoạt động tốt với chúng vì bạn không thể mô tả chính xác 0.8 điểm nổi và do đó Bộ hẹn giờ của bạn sẽ không bao giờ dừng lại.

Sử dụng >=. Hoặc tốt hơn, chỉ sử dụng int.

ví dụ:

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

Thật tuyệt vời! thats it ... dễ dàng và hữu ích .. cảm ơn rất nhiều! Vâng một điều nữa, là nó hợp pháp để làm điều này? Tôi có nghĩa là bằng cách sử dụng Timer và fading trong hộp thoại, tôi hy vọng nó sẽ không đi ngược lại tiêu chuẩn mã hóa Swing tiêu chuẩn? – Asif

+0

Tôi không biết bất kỳ "tiêu chuẩn" liên quan đến điều này, hoặc bất kỳ tiêu chuẩn Swing cho biện pháp đó, chỉ cần cẩn thận liên quan đến luồng, và tôi không thấy điều này như là bước vào chủ đề. –

+0

có mối quan tâm của tôi là với Swing Threading Model và EDT điều, tôi hy vọng nó không làm phiền họ, bởi vì tôi thích tinh chỉnh nhỏ này của tôi rất nhiều :-) – Asif