2013-02-27 47 views
13

Tôi đã thử hướng dẫn về điều này nhưng tôi vẫn không hoàn toàn hiểu nó. Về cơ bản câu hỏi của tôi là phương pháp nào tốt hơn và tại sao? Tôi có nên sử dụng paint hoặc paintComponent không?Sự khác biệt giữa sơn() và paintcomponent()?

Hãy cố gắng giữ câu trả lời đơn giản, cảm ơn.

+6

Xem thêm [* Tranh trong AWT và Swing *] (http://www.oracle.com/ technetwork/java/painting-140037.html). – trashgod

Trả lời

13

Trích dẫn từ tài liệu của paint() phương pháp

Phương pháp này thực sự đại biểu công việc của hội họa đến ba phương pháp bảo vệ: paintComponent, paintBorder, và paintChildren. ... Một lớp con chỉ muốn chuyên giao diện người dùng (giao diện) phương thức vẽ của đại biểu chỉ nên ghi đè lên paintComponent.

Có vẻ như phương pháp paint() thực sự rút ra thành phần, bao gồm cả đường viền và trẻ em. Nếu bạn chỉ muốn tùy chỉnh giao diện của thành phần ngoại trừ đường viền và trẻ em, bạn sử dụng paintComponent().

http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#paint(java.awt.Graphics)

+0

Trong khi chính xác, sẽ thận trọng khi liên kết với một phiên bản cập nhật nhiều hơn của JavaDocs, chỉ để làm nổi bật cho các nhà phát triển những thay đổi tiềm năng đối với API – MadProgrammer

+0

Tôi đã chỉnh sửa liên kết. thanks @MadProgrammer để nhắc tôi về điều này – christianhs

+0

Vẫn nhận được +1 cho câu trả lời bất kể;) – MadProgrammer

7

Nói chung, khi vẽ trong Swing, nó được khuyến khích để ghi đè paintComponent.

Có một số lý do tại sao, một là paintComponent được sơn ở lớp dưới cùng, có nghĩa là bạn sẽ không vô tình xóa bất kỳ thành phần nào được hiển thị trong quá trình vẽ - điều này xảy ra rất nhiều với những người đăng ở đây.

Có một, rất, rất ít lần bạn có thể cần ghi đè paint, nhưng tôi luôn khuyến khích bạn thử làm cho nó hoạt động với paintComponent trước tiên.

Check-out

+2

Tôi không nghĩ rằng nó quan trọng nếu bạn ghi đè lên paint() hoặc paintComponent() từ một điểm đệm kép. Xem phần đệm kép từ bài viết "Vẽ tranh trong AWT và Swing". Bây giờ nếu bạn xảy ra để ghi đè lên paint() ở mức khung (mà tôi không bao giờ đề nghị) và quên về cách gọi super.paint() thì bạn có thể gặp rắc rối. – camickr

+1

@camickr Ah vâng, bạn nói đúng, đó là lý lẽ cho việc không ghi đè các container cấp cao nhất: P – MadProgrammer

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