我在扩展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;
}
}发布于 2009-10-20 23:59:18
每次呈现单元格时,都会再次解析HTML。在渲染器中使用HTML通常会导致较差的性能,这并不奇怪。如果HTML刚刚被解析,我猜还没有时间开始图像的增量加载。通常,HTML会被添加到组件中,然后在重绘事件发生时会有延迟,这允许在单独的线程中加载图像来完成它的工作。
您可以通过返回与每个单元格相关联的组件来避免这种情况。
发布于 2009-10-21 08:57:04
从URL创建一个ImageIcon,然后将图标添加到列表模型中。我认为JList有一个默认的图标渲染器。
https://stackoverflow.com/questions/1597790
复制相似问题