Динамически изменяемое содержимое ListCellRenderer
Я пытаюсь создать клиент Twitter, используя Twitter4. Я храню твиты пользователей, информацию и т. Д. В DefaultListModel в Jlist. Я хочу добавить изображение профиля пользователя и для этого я устанавливаю иконку с помощью ListCellRenderer. Моя проблема здесь в том, что я могу установить только текст и значок ListCellRenderer для информации одного пользователя. Я использую цикл, чтобы снять несколько твитов и добавить их в модель, но средство рендеринга устанавливает только один твит много раз.
Это код для получения твита
for (int i = 0; i < list.size(); i++) {
Status each = (Status) list.get(i);
UI.model.addElement("<html><body style='width: 450px;'>"
+ "@"
+ each.getUser().getScreenName()
+ " - "
+ each.getText() + "<html><br>");
UI.whatIsDisplayedList.setCellRenderer(new newsFeedRenderer(each)); }
И вот как я устанавливаю ListCellRenderer
JLabel pic = new JLabel();
try {
ImageIcon img = new ImageIcon(TwitterFunctions.eachTweetProfilePic(each.getUser()));
pic.setIcon(img);
setIcon(img);
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TwitterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
setText( "@" + each.getUser().getScreenName() + " - " + each.getText());
Какие изменения мне нужно сделать, чтобы обеспечить правильное форматирование твитов?
Спасибо за помощь!
1 ответ
Вы не должны передавать newFeedReader() в setCellRenderer(); ListCellRenderer - это объект, используемый для рисования ячеек, а не для использования в качестве объекта базы данных. То, что вы хотите сделать, это
- Получить все статусы в начале
- Передать их как массив в JList
- Затем создайте пользовательский класс ListCellRenderer и в своем методе getListCellRendererComponent верните JLabel, в котором есть код ListCellRenderer.