如何在JTable单元格中显示图像?

问题描述 投票:1回答:1

我正在尝试使用JTable来显示我的人员列表,其中每个人的照片都是专用的。我想在JTable单元格中显示这些图像。我实现了使用自定义单元格渲染器显示目录中的图像。该单元格渲染器通过方法new ImageIcon()返回带有图标的标签。每当我的JTable中发生滚动时,我猜想此渲染器都可以工作并从目录中创建新图像。因此,这会使RAM爆炸并在图像中出现故障。我阅读了与此问题有关的所有问题,但是找不到有效的解决方法。解决此问题的方法将不胜感激。

我的渲染器看起来像:

public class ImageCellRenderer extends DefaultTableCellRenderer{
 JLabel lbl=new JLabel();
 public Component getTableCellRendererComponent(defaultparameters){
 ImageIcon imageIcon=new ImageIcon(getClass().getResource("path to directory"+table.getModel().getValueAt(row,column).toString+".jpg"));
 """
 Some code to turn image icon to scaled version
 """
 lbl.setIcon(imageIcon)
 return lbl;

 }

}
java image swing jtable tablecellrenderer
1个回答
0
投票

我想使用相同的ImageIcon

类似:

// Note: Probably don't use `DefaultTableCellRenderer`,
//    unless you are using the `JLabel` part of that.
public class ImageCellRenderer extends DefaultTableCellRenderer {
    private final JLabel label = new JLabel();
    private final Map<String,ImageIcon> images = new HashMap<>();
    public Component getTableCellRendererComponent(defaultparameters) {
        ImageIcon imageIcon = images.computeIfAbsent(
            value.toString(),
            // No need to look value up again. Delete this:
            //table.getModel().getValueAt(row,column).toString(),
            cell -> {
                ImageIcon newImage = new ImageIcon(
                    getClass().getResource("path to directory"+cell+".jpg")
                );
                """
                Some code to turn image icon to scaled version
                """
                return newIcon;
            }
        );
        lbl.setIcon(imageIcon)
        return lbl;
    }
}

(是否要在渲染器之间共享“缓存”(级别),并且将缓存逐出策略保留为练习。)

© www.soinside.com 2019 - 2024. All rights reserved.