2013-08-01 41 views
12

Tôi có một ứng dụng xoay trong đó tôi hiển thị hình ảnh trong một JPanel. Nếu ứng dụng không thể tạo hình ảnh tôi muốn xóa hình ảnh trước đó khỏi JPanel và thay thế bằng JTextField và tin nhắn. Tôi có thể thêm các trường văn bản, nhưng nó được vẽ trên đầu trang của các nội dung trước đó, mà chính nó là một phân lớp của JPanel. Dưới đây là những gì tôi có:JPanel removeAll không loại bỏ các thành phần trước

private void displayMessage(String message) { 
    JTextField tf = new JTextField(message); 
    cdPanel.removeAll(); 
    cdPanel.add(tf, BorderLayout.NORTH);//tried lots of variations, inc. no layout  
    cdPanel.validate(); 
} 

Làm thế nào tôi có thể nhận được cdPanel để vẽ lại hoàn toàn chính nó?

+0

Had bạn đã thử gọi 'cdPanel.revalidate(); cdPanel.repaint() 'thay vì' cdPanel.validate() '? Hơn nữa, các hình ảnh được hiển thị trên 'JPanel' này như thế nào? Bạn đang sử dụng 'JLabel' hoặc vẽ chúng trực tiếp trên' JPanel'? –

+1

@ nIcEcOw cảm ơn, hoạt động hoàn hảo. Xin vui lòng gửi vì vậy tôi có thể đánh dấu của bạn như là câu trả lời :-) – jaybee

+0

Bạn MOST WELCOME và KEEP SMILING :-) Nhưng Xin vui lòng từ thời gian tới, cố gắng cung cấp thông tin đầy đủ, như thể bạn đang giải thích nó cho một đứa trẻ, __, __What bạn đang làm gì? __, __What bạn mong đợi? __ và __What chính xác đã xảy ra? __ Bằng cách này, người trả lời sẽ có thể cung cấp cái nhìn sâu sắc tốt hơn về tình hình nhất định :-) –

Trả lời

25

Bạn chỉ có thể thử gọi:

cdPanel.revalidate(); 
cdPanel.repaint(); // This is required in some cases 

thay vì

cdPanel.validate(); 
+1

Cảm ơn! Đã lưu tôi một thời gian –

+0

@nIcEcOw: Cảm ơn, điều này đã hoạt động như một sự quyến rũ. Nhiều đánh giá cao cho câu trả lời của bạn :) – John

+0

@ John: Bạn đang CHÀO MỪNG ĐÓN VÀ GIỮ NHỎ :-) –

3

Vì bạn đang xử lý thời gian chờ không thể đoán trước, hãy sử dụng SwingWorker để thực hiện tải trong nền, như được hiển thị here. Ví dụ này sử dụng pack() để đổi kích thước nhãn thành hình ảnh của hình ảnh, nhưng bạn có thể muốn sử dụng lưới có kích thước cố định và chia tỷ lệ hình ảnh, như được hiển thị here.