[英]Java Swing - JList custom cell rendering - capturing actions
每當我為JList創建自定義單元格渲染器時,我添加到它的任何元素都不會響應操作。 例如,如果我讓單元格渲染器返回一個帶有元素的JPanel,其中一個具有ActionListener,則它根本不響應。
為什么是這樣?
渲染器可能看起來像是返回單元組件的工廠,但實際上它遵循flyweight渲染方法並使用相同的組件來渲染所有單元格(每次調用getListCellRendererComponent()
都應該重新配置相同的組件實例特定的單元格並返回它以便可以渲染單元格)。
這樣,您可以讓JList
(以及JTable
和JTree
)顯示大量單元格,而無需為每個單元格實現組件。 作為副作用,渲染組件無法響應事件,因為它僅在渲染循環期間使用,但不會出現在組件樹中。
正如Neil Coffey所說,你可以將你的監聽器添加到JList
( JTable
, JTree
),並使用輔助方法( locationToIndex(...)
, getCellBounds(...)
)來分派哪個單元受到影響,從而處理具有細胞特定邏輯。
作為列表單元格渲染器返回的項目僅用於: 渲染 。 使用JList注冊偵聽器(通常,您需要ListSelectionListener)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.