Thông thường, khi sử dụng JTable
hoặc JTree
, người dùng viết và gán nó là trình kết xuất ô cụ thể của riêng.Khó hiểu cơ chế trình kết xuất của JTable và JTree
Rất phổ biến để kế thừa thành phần của người dùng từ DefaultTableCellRenderer
và triển khai phương thức kết xuất getTableCellRendererComponent
. Nó chỉ ra rằng DefaultTableCellRenderer
trong thực tế kế thừa từ JLabel, do đó trả về chính mình (điều này) khi được gọi đến siêu (tại phương thức render) và do đó renderer của người dùng cũng có thể tự trả về (this).
Và tất cả đều hoạt động tốt.
Câu hỏi của tôi là như thế nào?
Mỗi lần phương thức này được gọi bởi bảng, nó được đưa ra các tham số khác nhau và nhãn đầu ra được thay đổi làm chức năng của các tham số này. Nếu nó thực sự là cùng một trường hợp của nhãn - không nên thay đổi nó theo lời gọi cuối cùng của phương thức này? Điều đó có nghĩa là tất cả các ô của bảng đều bị lây nhiễm bao gồm cùng một cá thể nhãn, giữ cùng một giá trị (giá trị của cuộc gọi cuối cùng đến phương thức kết xuất)?
Tôi đã tìm kiếm trên web, và đào bên trong mã của Swing, và không thể tìm thấy bất kỳ hành động bản sao hoặc copy constructor mà thực sự bản sao nhãn đầu ra. Tôi không thể tìm thấy bất kỳ bằng chứng nào (có lẽ) swing sử dụng sự phản chiếu để tái khởi tạo trình kết xuất mỗi lần từ đầu.
Tôi đã đọc Swing của tutorial on JTables, và ở đó tôi có thể tìm thấy những dòng tiếp theo:
Bạn có thể mong đợi mỗi tế bào trong một bảng là một thành phần. Tuy nhiên, vì lý do hiệu suất, các bảng Swing được thực hiện khác nhau. Thay vào đó, một trình kết xuất ô đơn lẻ thường được sử dụng để vẽ tất cả các ô có chứa cùng loại dữ liệu. Bạn có thể nghĩ rằng trình kết xuất dưới dạng tem mực có thể định cấu hình mà bảng sử dụng để đóng dấu dữ liệu được định dạng phù hợp vào mỗi ô. Khi người dùng bắt đầu chỉnh sửa dữ liệu của ô, một trình chỉnh sửa ô sẽ chiếm toàn bộ ô, kiểm soát hành vi chỉnh sửa của ô.
Chúng đưa ra một gợi ý, đó thực sự là những gì tôi nói là chính xác, nhưng không giải thích cách thực sự được thực hiện.
Tôi không thể tải. Có thể nào của bạn không?
+1 Ẩn dụ ảnh chụp màn hình là một hình ảnh tốt. Tôi nghĩ rằng một trong những được sử dụng nhất là một 'tem' nhưng ảnh chụp màn hình có thể rõ ràng hơn – Robin
Cảm ơn. ẩn dụ chắc chắn hiện các trick :). nó bây giờ đã được hiểu. –