通常,當使用JTable
或JTree
時,用戶寫入並分配它是自己特定的單元格渲染器。理解swing的JTable和JTree的渲染器機制的難點
從DefaultTableCellRenderer
繼承用戶組件並實現渲染器方法getTableCellRendererComponent
是非常普遍的。事實證明,DefaultTableCellRenderer
實際上是從JLabel繼承的,因此在調用super(在render方法)時返回自己(this),因此用戶的渲染器也可以類似地返回自己(this)。
而且一切正常。
我的問題是怎麼回事?
每次該表調用該方法時,都會給出不同的參數,並根據這些參數更改輸出標籤。如果它確實是標籤的同一個實例 - 不應該根據最後一次調用此方法來更改它嗎? 這不是說所有表格的單元格都是由相同的標籤實例組成,它們擁有相同的值(最後一次調用渲染器方法的值)?
我已經在網上搜索,並且Swing的代碼中挖掘,並不能找到克隆或拷貝構造函數,實際上覆制了輸出標籤的任何行爲。 我找不到任何證據表明(可能)擺動使用反射來重新實例化渲染器,每次從頭開始。
我看了Swing的tutorial on JTables,還有我能找到下一行:
您可能希望在一個表中的每個單元是一個組件。但是,出於性能原因,Swing表格的實現方式不同。 相反,單個單元格渲染器通常用於繪製包含相同類型數據的所有單元格。您可以將渲染器視爲可配置的油墨印記,表格用於將適當格式化的數據印到每個單元上。當用戶開始編輯單元格的數據時,單元格編輯器接管單元格,控制單元格的編輯行爲。
他們給出了一個提示,確實我所說的是正確的,但並沒有解釋它是如何實際完成的。
我無法得到它。你們可以嗎?
+1屏幕比喻是一個很好的例子。我認爲最常用的是「郵票」,但截圖可能更清晰 – Robin
謝謝。這個比喻證明了這個訣竅:)。現在理解了。 –