Câu hỏi của tôi là TẠI SAO là cùng một thói quen xoay-tùy chỉnh-sơn gần 16 lần nhanh hơn khi vẽ trên một JPanel so với trực tiếp trên JFrame? Nó chỉ là bộ đệm đôi? Nó không thể được, chắc chắn?Tại sao vẽ trên JFrame chậm hơn rất nhiều so với trên JPanel?
Thông tin cơ bản: Tôi đã gặp sự cố với tùy chỉnh vẽ không được làm mới khi JFrame không bị che khuất (đặc biệt là chỉ bị che khuất một phần). Sau khi tìm kiếm SO tôi quyết định cắn-the-bullet và tìm ra cách để nối một phân lớp của JPanel thành dạng biểu mẫu thiết kế dạng bluddy-NetBeans.
Đối với bất kỳ ai trong cùng một trường hợp: Trong NetBeans bạn cần tạo một lớp tiêu chuẩn mới (KHÔNG phải dạng JPanel) chỉ xảy ra để mở rộng JPanel và tự mã hóa mọi thứ trong đó (không có trình thiết kế GUI, như ole-days, thở dài). Sau đó, bạn thêm một JPanel chuẩn vào biểu mẫu của bạn, đặt kích thước của nó; sau đó nhấp chuột phải và chọn "Tùy chỉnh mã" và chọn "tạo tùy chỉnh" trong hộp tổ hợp ... nơi nó tạo ra một javax.swing.JPanel mới thay thế lớp con của bạn.
Vì vậy ... Điều này cho phép tôi "làm điều đó đúng" và vẽ trên một thành phần, thay vì trực tiếp trên biểu mẫu. Ngoài ra, các bảng-key-nghe một giải pháp nhiều chỗ hơn so với hi-jacking các khung key-event-dispatcher. Dù sao, bây giờ profiler nói rằng chính xác cùng một mã tùy chỉnh-sơn thực hiện nhanh hơn gần 16 lần trong paintComponent của JPanel() như sơn JFrame apposed() ... và tôi đã tự hỏi nếu có ai có thể vui lòng giải thích tại sao.
Cảm ơn bạn trước. Keith.
EDIT: Câu hỏi này được dựa trên hiểu sai số liệu. Trình lược tả không bao gồm/báo cáo phương thức paintComponent() của JPanel trong chuỗi AWT-EventQueue, trong đó-như cấu hình đường cơ sở của tôi không bao gồm lớp của JFrame(). Tôi nên cẩn thận hơn trước khi hỏi một câu hỏi ngớ ngẩn. Lỗi của tôi.
Profiler, VisualVM iirc, nên cho bạn biết (các) phương pháp nào đang mất nhiều thời gian hơn. Đó sẽ là một khởi đầu tốt để tìm thấy những gì đang xảy ra. –
@JonathanDrapeau: Bạn nói đúng! Cấu hình KHÔNG báo cáo paintComponent như một phần của chủ đề "AWT-Event-Queue" (trong khi đó JFrame paint là)! Vì vậy, đó là một sự khác biệt trong cách hai giải pháp được báo cáo. Lỗi của tôi! – corlettk
đây là câu hỏi rất cụ thể, bởi vì paitning để AWT Components sẽ nhanh hơn (đồng nghiệp từ hệ điều hành gốc) cho các JComponents childs Swing của nó, nhưng chúng ta đã nói về tiền sử đồ họa cốt lõi, không có nơi nào đó speedee ot tối ưu hóa, bạn có thể so sánh với một lõi đồ họa mới được sử dụng trong Nimbus và giống nhau (AFAIK) với những thay đổi nhỏ làm cơ sở cho JavaFX – mKorbel