簡體   English   中英

Java Swing - JList自定義單元格渲染 - 捕獲操作

[英]Java Swing - JList custom cell rendering - capturing actions

每當我為JList創建自定義單元格渲染器時,我添加到它的任何元素都不會響應操作。 例如,如果我讓單元格渲染器返回一個帶有元素的JPanel,其中一個具有ActionListener,則它根本不響應。

為什么是這樣?

渲染器可能看起來像是返回單元組件的工廠,但實際上它遵循flyweight渲染方法並使用相同的組件來渲染所有單元格(每次調用getListCellRendererComponent()都應該重新配置相同的組件實例特定的單元格並返回它以便可以渲染單元格)。

這樣,您可以讓JList (以及JTableJTree )顯示大量單元格,而無需為每個單元格實現組件。 作為副作用,渲染組件無法響應事件,因為它僅在渲染循環期間使用,但不會出現在組件樹中。

正如Neil Coffey所說,你可以將你的監聽器添加到JListJTableJTree ),並使用輔助方法( locationToIndex(...)getCellBounds(...) )來分派哪個單元受到影響,從而處理具有細胞特定邏輯。

作為列表單元格渲染器返回的項目僅用於: 渲染 使用JList注冊偵聽器(通常,您需要ListSelectionListener)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM