Các renderer có thể trông giống như một nhà máy trả lại các thành phần cho các tế bào, nhưng trên thực tế nó theo hạng ruồi render cách tiếp cận và sử dụng cùng phần cho rendering tất cả các ô (mỗi cuộc gọi đến getListCellRendererComponent()
là nghĩa vụ phải cấu hình lại cùng một cá thể thành phần cho một ô cụ thể và trả về nó để ô có thể được hiển thị).
Bằng cách đó, bạn có thể có JList
(cũng như JTable
và JTree
) hiển thị số lượng lớn ô mà không cần phải instanciate thành phần cho mỗi ô. Là một tác dụng phụ, thành phần render không thể đáp ứng với các sự kiện, vì nó chỉ được sử dụng trong vòng lặp render, nhưng không xuất hiện trong cây thành phần.
Cũng như Neil Coffey nói, bạn có thể thêm các thính giả của mình vào JList
(JTable
, JTree
) thay vào đó, và sử dụng các phương pháp helper (locationToIndex(...)
, getCellBounds(...)
) để gửi mà tế bào bị ảnh hưởng và do đó đối phó với logic cụ thể của tế bào.
Nguồn
2009-04-14 08:02:44
Câu hỏi rất hay. Tôi nghĩ rằng nó có thể có một cái gì đó để làm với ItemListeners, nhưng bây giờ tôi không nghĩ như vậy ... Tôi đã cố gắng tìm mã mẫu nhưng không thành công. – Uri
Xin chào, tôi gặp phải vấn đề tương tự, bạn có thể giải quyết được sự cố không? – user236501