2012-05-28 30 views
10

Tôi đã nhìn thấy nó được viết trên trang web này một số lần (chẳng hạn như herehere) mà bạn không được gọi setVisible(true) trước khi thêm các thành phần vào số JComponent, nhưng tôi chưa thấy giải thích và thông tin về internet có vẻ khan hiếm.Tại sao tôi không nên gọi setVisible (true) trước khi thêm các thành phần?

Tại sao trường hợp này xảy ra và điều gì xảy ra nếu bạn vi phạm quy tắc?

+0

bạn có thể đặt nguồn vào nơi họ nói không? –

+1

Từ một quan điểm trực quan, nhìn thấy một thành phần vẫn còn có những thứ mới được thêm vào nó có vẻ cẩu thả (trừ khi, tất nhiên, đây là hành vi mong đợi của người dùng). – Jeffrey

Trả lời

19

Bạn không vi phạm bất cứ điều gì nếu bạn gọi nó trước, nhưng có thể bạn sẽ cần phải gọi lại nếu bạn đã thêm bất cứ điều gì. Khác Swing sẽ không làm cho các thành phần được thêm vào. Bạn cần có JVM gọi phương thức paint(...) của JFrame để có các thành phần của JFrame được hiển thị và setVisible(true) sẽ yêu cầu JVM thực hiện điều này. Nếu bạn đã từng thêm các thành phần sau khi gọi setVisible (true) và không thấy các thành phần, bạn sẽ thấy rằng chúng sẽ "hiện thực hóa" nếu bạn tái kích thước JFrame. Điều này là do việc định cỡ lại nó khiến hệ điều hành yêu cầu Swing vẽ lại GUI và điều này sẽ dẫn đến việc gọi số paint(...). Lưu ý rằng nếu bạn thêm một thành phần sau khi tạo GUI, bạn có thể gọi revalidate() và thường là repaint() trên vùng chứa của nó để lấy thành phần mới được đặt chính xác và sau đó được hiển thị. Các repaint() sẽ chắc chắn là cần thiết nếu thay đổi trong các thành phần liên quan đến việc xóa hoặc một thành phần được rút ra nơi một thành phần khác được hiển thị trước đó.

Đề xuất sách rằng tôi cao khuyên bạn nên: Filthy Rich Clients mua Guy và Haase. Cứ mua đi! Bạn sẽ không hối tiếc việc mua hàng.

7

Khuếch đại trên phân tích hữu ích của @ Hovercraft, bạn cũng có thể phải trả lại pack() vùng chứa cấp cao nhất kèm theo. Điều này example, bổ sung thêm các phần tử vào một số JList sau setVisible(), có thể minh họa sự cân bằng.

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