Java 自定义单元渲染阻止在GetListCellRenderComponent()中加载图像

Java 自定义单元渲染阻止在GetListCellRenderComponent()中加载图像,java,swing,jlist,listcellrenderer,Java,Swing,Jlist,Listcellrenderer,我有一个JList,它使用自定义单元渲染器显示自定义对象(Frog) frogList = new JList<Frog>(); frogModel = new DefaultListModel<Frog>(); frogList.setModel(frogModel); frogList.setCellRenderer(new FrogBrowserCellRenderer()); //add frogs... 我在我的getListCellRenderCompone

我有一个JList,它使用自定义单元渲染器显示自定义对象(Frog)

frogList = new JList<Frog>();
frogModel = new DefaultListModel<Frog>();
frogList.setModel(frogModel);
frogList.setCellRenderer(new FrogBrowserCellRenderer());
//add frogs...

我在我的
getListCellRenderComponent()
中调用了这个方法,我知道这会导致糟糕的性能,但我不知道如何在内存中为多个青蛙缓存它,并且只使用一个对象。也许是图像地图?我似乎找不到任何可靠的证据来证明这样做是正确的。

在Frog类中创建一个名为“getLatestThumbnailImage”的方法,如果缩略图为null,则创建它并将其缓存在内存中,如果最新的图像发生更改,则将缓存的引用设为null,因此,它将在下一次需要时调整大小。如果需要,或者创建某种缩略图管理器,那么当传递对Frog的引用时,它将创建/返回缓存的缩略图。您可以使用WeakHashMap来维护青蛙和缩略图之间的引用
public Image createListThumbnail() {
    try {
        Image returnImg = null;
        //get latest frog image
        SiteImage img = frog.getLatestImage();
        BufferedImage src = ImageIO.read(new File(XMLFrogDatabase.getImagesFolder()+img.getImageFileName()));
        BufferedImage thumbnail = Scalr.resize(src, Scalr.Method.SPEED, Scalr.Mode.FIT_TO_WIDTH, 200, 150, Scalr.OP_ANTIALIAS);
        if (!frog.isFullySearchable()){
            ImageFilter filter = new GrayFilter(true, 30);  
            ImageProducer producer = new FilteredImageSource(thumbnail.getSource(), filter);  
            returnImg = Toolkit.getDefaultToolkit().createImage(producer);  
        }
        return returnImg;
    } catch (IOException e) {
        IdentiFrog.LOGGER.writeExceptionWithMessage("Unable to generate thumbnail for image (in memory).", e);
    }
    return null;
}