我在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;
}
}
答案 0 :(得分:0)
每次渲染单元格时,都会再次解析HTML。在渲染器中使用HTML通常会导致性能不佳,这并不奇怪。如果刚刚解析了HTML,我想还没有时间开始增量加载图像。通常HTML会被添加到组件中,然后在重绘事件到来时会有延迟,这允许在单独的线程中加载图像来完成它的工作。
您可以放弃返回与每个单元格关联的组件。
答案 1 :(得分:0)
从URL创建ImageIcon,然后将该图标添加到列表模型中。我认为JList有一个defautl渲染器用于图标。