0

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

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;
    }
}
4

2 回答 2

0

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

于 2009-10-21T00:57:03.877 回答
0

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

您可能可以通过返回与每个单元格关联的组件而侥幸逃脱。

于 2009-10-20T23:59:17.660 回答