使用JEditorPane / ListCellRenderer破坏img标记

时间:2009-10-20 23:06:04

标签: java image jlist jeditorpane

我在ListCellRenderer中有这个代码,它扩展了JEditorPane。编辑器窗格不显示图像,而是显示“损坏的图标”。怎么了?

public class TweetCellRenderer extends JEditorPane implements ListCellRenderer {

    public Component getListCellRendererComponent(
        javax.swing.JList list,
        Object value,
        int index,
        boolean isSelected,
        boolean cellHasFocus
    ) {

        setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 6));

        StringBuffer sb = new StringBuffer();

        setContentType("text/html");

        sb.append("<html><body>");
        sb.append("<img src='http://www.google.co.uk/images/firefox/video.png' />");

        sb.append("</body></html>");

        System.out.println(sb);

        setText(sb.toString());  

        setBackground(isSelected ? SELECTED_BG : BG);        
        setForeground(isSelected ? SELECTED_FG : FG);

        return this;
    }
}

2 个答案:

答案 0 :(得分:0)

每次渲染单元格时,都会再次解析HTML。在渲染器中使用HTML通常会导致性能不佳,这并不奇怪。如果刚刚解析了HTML,我想还没有时间开始增量加载图像。通常HTML会被添加到组件中,然后在重绘事件到来时会有延迟,这允许在单独的线程中加载图像来完成它的工作。

您可以放弃返回与每个单元格关联的组件。

答案 1 :(得分:0)

从URL创建ImageIcon,然后将该图标添加到列表模型中。我认为JList有一个defautl渲染器用于图标。