Java 自定义单元渲染阻止在GetListCellRenderComponent()中加载图像
我有一个JList,它使用自定义单元渲染器显示自定义对象(Frog)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
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;
}