动态更改ListCellRenderer的内容

时间:2013-03-18 23:50:43

标签: java swing jlist twitter4j listcellrenderer

我正在尝试使用Twitter4构建一个Twitter客户端。我将用户的推文和信息等存储在Jlist中的DefaultListModel中。我想添加用户个人资料图片并执行此操作我使用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 个答案:

答案 0 :(得分:0)

你不应该将newFeedReader()传递给setCellRenderer(); ListCellRenderer是用于绘制单元格的对象,不能用作数据库类型的对象。 你想要做的是,

  • 从头开始获取所有状态
  • 将它们作为数组传递给JList
  • 然后创建一个自定义ListCellRenderer类,并在您的getListCellRendererComponent方法中,返回具有ListCellRenderer代码的JLabel