我使用了一个自定义的listcellrenderer和一个列表,并设置了一个标题和一个图像,但它确实很滞后,因为每次我滚动时图像都会不断加载。我有什么办法可以解决这个问题吗?这是我的密码:
@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;
}
我基本上希望每次滚动列表时图像停止加载,因为这会导致应用程序严重滞后。提前谢谢。
2条答案
按热度按时间vqlkdk9b1#
解决方案是创建一些排序缓存,正如weisj在comment部分中已经提到的那样。
实施
hashCode()
以及equals()
方法Movie
如果你还没有完成的话。现在创建缓存:
然后,在里面
getListCellRendererComponent
:海报会留在记忆中。在第一次渲染之后,它们将不会被“重新加载”-
Movie#getPoster
不会被调用。现在,如果gui上有很多电影,可以考虑使用弱散列Map。
jw5wzhpr2#
您可以基于缓存图标
Movie#getTitle
(我认为是String
.