Динамическое изменение содержимого ListCellRenderer

Я пытаюсь создать твиттер-клиент с помощью 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());

Какие изменения мне нужно внести, чтобы включить правильное форматирование твитов?

Спасибо за помощь!


person iainmac    schedule 18.03.2013    source источник
comment
Опять же, как упоминалось в вашем предыдущем вопросе, пожалуйста, создайте и опубликуйте sscce. Пожалуйста, помните, что все мы добровольцы, поэтому бремя усилий, направленных на то, чтобы ответить на вопрос или упростить его, должно быть на вас. Пожалуйста, прочтите ссылку.   -  person Hovercraft Full Of Eels    schedule 19.03.2013
comment
@iainmac воспринимает ваш рендерер как штамп даты (google.com/ search?q=date+stamper&hl=en&tbm=isch). Вводимое вами значение изменяет вывод модуля визуализации, но для каждого значения используется один и тот же модуль визуализации (или штамп).   -  person rob    schedule 19.03.2013


Ответы (1)


Вы не должны передавать newFeedReader() в setCellRenderer(); ListCellRenderer — это объект, используемый для рисования ячеек, а не для использования в качестве объекта базы данных. То, что вы собираетесь сделать, это,

  • Получить все статусы в начале
  • Передайте их как массив в JList
  • Затем создайте собственный класс ListCellRenderer и в методе getListCellRendererComponent верните свой JLabel с кодом ListCellRenderer.
person Shawn Shroyer    schedule 19.03.2013
comment
Привет приятель, спасибо за ответ! Извините, я должен был упомянуть, что newsfeedRenderer — это мой собственный класс ListCellRenderer. Не могли бы вы опубликовать краткий пример того, что вы предлагаете? Спасибо! - person iainmac; 19.03.2013
comment
@HovercraftFullOfEels извинения, я не знаю, как извлечь и создать sscce с моим кодом. Надеюсь, того, что я предоставил, достаточно для вашей помощи. Спасибо! - person iainmac; 19.03.2013
comment
@iainmac: Давай сейчас. Просто создайте небольшую компилируемую исполняемую программу с JList и ListCellRenderer, которую мы можем запускать и изменять. По сути, вы уже просите нас сделать это, и если вы создадите это первым, это облегчит нам всем задачу. Я уверен, что ты справишься с этим. - person Hovercraft Full Of Eels; 19.03.2013
comment
@HovercraftFullOfEels проблема решена большое спасибо за помощь - person iainmac; 19.03.2013