2012-02-23 49 views
0

我爲我的聊天應用程序實現了自己的ListCellRenderer。我使用JList來列出所有用戶。單元格渲染器主要由一個圖標組成,該圖標顯示特定用戶當前是在線還是離線,以及他/她的名字。該列表由一個DefaultListModel控制,我使用它來向JList提供必要的信息。Java:如何更新自定義ListCellRenderer?

但是,當列表模型確實改變其狀態(例如,用戶離線)時,列表單元格渲染器似乎不會被調用?

有人任何想法如何解決這個問題?試圖調用JList實例上的updateUI(),但沒有幫助。

非常感謝提前!

+0

向我們顯示代碼。渲染器應在模型更改時調用。你可能忘記發起一個事件來表明模型已經改變。 – 2012-02-23 19:40:55

回答

4

單元格渲染器可能正常工作。什麼不工作是ListModel。 DefaultListModel未檢測到對模型對象內部狀態的更改。您需要在列表模型上調用fireContentsChanged。可能你需要添加監聽器到你的模型對象,也許你甚至必須擴展DefaultListModel;因爲我沒有看到它的代碼,我不知道你的樣子。

你不應該只用一個名字聽起來不錯的隨機方法(updateUI做一些非常不同的事情)。

+0

非常感謝您的快速回復。我會嘗試調用fireContentsChanged,因爲這種方法是受保護的,我實際上必須擴展DefaultListModel。 – salocinx 2012-02-23 20:04:18

+1

btw。 javadoc說JList.UpdateUI()函數如下:如果當前的單元格渲染器是由開發人員安裝的(而不是外觀本身),這也會導致單元格渲染器及其子代被更新......這不是隻聽起來不錯,但也有助於我的問題。你不覺得嗎? – salocinx 2012-02-23 20:05:10

+0

它的工作原理:-)非常感謝您的幫助! – salocinx 2012-02-23 20:17:26