Tôi có một ứng dụng máy tính để bàn java nhỏ cần có khả năng thêm và xóa các trường động bằng cách nhấp vào nút "+" và "-" tương ứng. Tôi đã nhận được điều này để làm việc bằng cách gọi revalidate() và sau đó repaint() trên tất cả các thùng chứa cha mẹ tất cả các con đường lên đến JFrame trong ActionListener.Java Swing revalidate() và repaint() vấn đề
Điều này dường như đã thực hiện thủ thuật, nhưng đôi khi nó không hoạt động và JPanels không thay đổi kích thước chính xác. Điều này xảy ra không thường xuyên và dường như ngẫu nhiên và khiến tôi tin rằng đó có thể là vấn đề tương tranh. Tôi đã cố gắng tung ra các thùng chứa cha mẹ từ thread gửi sự kiện nhưng điều này đã không giải quyết được vấn đề.
Đây có phải là vấn đề tương tranh hay tôi đang sủa nhầm cây không? Bất cứ ai có bất kỳ ý tưởng những gì đang xảy ra và làm thế nào nó có thể được giải quyết?
nhiều đánh giá cao
-SwingNoob
@john, một ['LayoutManager'] (http://download.oracle.com/javase/tutorial/uiswing/layout/using.html) chịu trách nhiệm về các thành phần của nó. được nói, hoàn toàn không có lý do gì để gọi 'repaint()' hoặc 'revalidate()' khi thêm/xóa các thành phần khỏi một thùng chứa. – mre
Lỗi liên tục thường đề xuất các vấn đề tương tranh, nhưng tôi không nghĩ rằng bất kỳ ai sẽ có thể cung cấp cho bạn câu trả lời chắc chắn dựa trên thông tin được trình bày. –
@mre: Vui lòng làm rõ nhận xét của bạn vì trong kinh nghiệm của tôi và từ bài đọc của tôi, người ta phải gọi là 'revalidate' và 'repaint' trên Container khi xóa các mục và' revalidate' và đôi khi 'repaint' khi thêm thành phần. –