Динамически изменяемое содержимое 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.
Другие вопросы по тегам