Tôi có một GUI khá nặng để xây dựng/khởi tạo trên nền tảng mà nó chạy .. Vì vậy, tôi muốn cập nhật tiến trình trong khi nó khởi tạo ..Làm thế nào để cập nhật/vẽ JProgressBar trong khi Swing được tải xây dựng GUI
Tôi có một JDialog nhỏ chưa được trang bị chứa một JLabel và một JProgressBar mà tôi muốn cập nhật tại những vị trí cụ thể trong quá trình khởi tạo, bởi vì sự kiện gửi đi (theo quy tắc Swing) được sử dụng để xây dựng/khởi tạo GUI, tiến trình là tất nhiên là không được cập nhật cho đến khi EDT không hoạt động nữa (tức là khởi tạo xong) ..
JProgressBar Tôi đã vẽ lại bằng cách sử dụng "paintImmediately", nhưng tôi dường như không làm cho nó hoạt động tốt cho t JLabel và hộp thoại chính nó .. Có phương pháp nào được đề nghị/chứng minh đơn giản để thực hiện việc này không?
cổ vũ ...
EDIT: Thêm ví dụ về nội dung tôi đang cố gắng thực hiện; rất đơn giản, tất nhiên.
private JLabel progressLabel;
private JProgressBar progressBar;
public static int main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
showProgressDialog();
progressLabel.setText("construct 1");
constructSomeHeavyGUI();
progressLabel.setText("construct 2");
progressBar.setValue(33);
constructSomeMoreHeavyGUI();
progressLabel.setText("construct 3");
progressBar.setValue(67);
constructEvenMoreHeavyGUI();
progressLabel.setText("done");
progressBar.setValue(100);
hideProgressDialog();
showHeavyGUI();
}
});
}
các repaints do các cuộc gọi đến progressBar.setValue()
/progressLabel.setText()
trên tất nhiên sẽ được xếp hàng đợi chừng nào EDT đang bận và kết quả là một repaint sau khi chúng tôi đều thực hiện thay vì cập nhật trên đường đi ..
* "đơn giản hóa rất nhiều, tất nhiên" * Để đăng mã được đơn giản hóa rất nhiều cho người trả lời, hãy đăng [SSCCE] (http://pscode.org/sscce.html) (tất nhiên). –