2013-04-28 38 views
5

Tôi có tab cài đặt trong chương trình của mình. Dữ liệu bạn có thể đặt ở đó, không chỉ có thể thay đổi từ bảng điều khiển này. Đó là lý do tại sao tôi muốn tải lại dữ liệu này cứ 5 giây một lần. Tôi nghĩ rằng điều này đã được thực hiện với một Thread thêm, nhưng kiến ​​thức của tôi về Threads là tối thiểu. Tôi đã có một phương pháp tải lại cho mục đích này.Tải lại JPanel mỗi X giây (với chủ đề?)

Tôi nên sử dụng điều gì để thực hiện việc này (và cách ...)?

Trả lời

4

Sử dụng một ScheduledExecutorService:

private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); 
scheduler.scheduleAtFixedRate(yourRunnable, 5, 5, SECONDS); 

Sau đó tải lại bạn JPanel trong yourRunnable (chỉ cần làm theo các ví dụ từ JavaDocs).

0

Bạn có thể sử dụng Timer để cập nhật định kỳ dữ liệu của mình.

5

nhưng kiến ​​thức của tôi về Chủ đề là tối thiểu ...

  1. Bạn hoàn toàn cần phải tìm hiểu về chủ đề nói chung, và Java Concurrency Tutorial thể giúp đỡ.
  2. Sau đó, bạn nên tìm hiểu về concurrency in Swing nói riêng.
  3. Vẽ biểu diễn đồ họa của GUI của dữ liệu trong phương thức paintComponent(...) của JPanel, hoặc có lẽ tốt hơn, trong BufferedImage sau đó được hiển thị bên trong paintComponent(...).
  4. Tải lại dữ liệu trong chuỗi nền như SwingWorker. Công nhân này có thể có một java.util.Timer hoặc ScheduledExecutorService theo câu trả lời của syb0rg (câu trả lời của 1b đến câu trả lời của syb0rg) yêu cầu và lấy dữ liệu mới sau mỗi 5 giây.
  5. Sau đó gọi repaint() từ chuỗi sự kiện Swing sau khi dữ liệu của bạn được thay đổi. Nếu sử dụng một SwingWorker, cặp phương thức xử lý/xuất bản có thể giúp với điều này. Bạn có thể xuất bản dữ liệu của bạn lên chuỗi sự kiện Swing với điều này.
+0

Bạn viết sai tên tôi: P +1 cho tất cả nội dung hữu ích mà tôi không đề cập đến. – syb0rg

+1

@ syb0rg: oops, xấu của tôi! –

+0

+1 để cung cấp các bước ngắn gọn trong 5 điểm. –

Các vấn đề liên quan