Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java CellRenderer中的设置图标导致延迟_Java_List_Swing_Listcellrenderer - Fatal编程技术网

Java CellRenderer中的设置图标导致延迟

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) {

我使用一个带有列表的自定义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;

}
@覆盖

公共组件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;
}