Java CellRenderer中的设置图标导致延迟
我使用一个带有列表的自定义listcellrenderer,并设置标题和图像,但它确实很滞后,因为每次我滚动时图像都会不断加载。我有办法解决这个问题吗? 这是我的密码:Java CellRenderer中的设置图标导致延迟,java,list,swing,listcellrenderer,Java,List,Swing,Listcellrenderer,我使用一个带有列表的自定义listcellrenderer,并设置标题和图像,但它确实很滞后,因为每次我滚动时图像都会不断加载。我有办法解决这个问题吗? 这是我的密码: @Override public Component getListCellRendererComponent(JList<? extends Movie> list, Movie value, int index, boolean isSelected, boolean cellHasFocus) {
@Override
public Component getListCellRendererComponent(JList<? extends Movie> list, Movie value, int index, boolean isSelected, boolean cellHasFocus) {
this.titleHolder.setText(value.getTitle());
this.imageHolder.setIcon(new ImageIcon(value.getPoster()));
return this;
}
@覆盖
公共组件getListCellRenderComponent(JList解决方案是创建一些排序缓存,正如weisj在注释部分中所提到的那样
如果尚未执行Movie
类的hashCode()
和equals()
方法,请执行该方法
现在创建缓存:
private Map<Movie,ImageIcon> moviePostersCache = new HashMap<>();
并且海报将存储在内存中。在第一次渲染之后,它们将不会被“重新加载”-Movie#getPoster
将不会被调用
现在,如果有很多电影来GUI,请考虑.< /P> < P>你可以根据<代码>电影> GESTECT/<代码>缓存图标(我假设是类型<代码>字符串< /代码> .<
private-Map-iconCache=new-HashMap();
@凌驾
公共组件GetListCellRenderComponent(JList)为什么不缓存图像图标
,例如在地图中
?我该怎么做?谢谢。
@Override
public Component getListCellRendererComponent(JList<? extends Movie> list, Movie value, int index,
boolean isSelected, boolean cellHasFocus) {
this.titleHolder.setText(value.getTitle());
if (!moviePostersCache.containsKey(value))
moviePostersCache.put(value, new ImageIcon(value.getPoster()));
this.imageHolder.setIcon(moviePostersCache.get(value));
return this;
}