Как показать изображения в JTable Cell? - PullRequest
1 голос
/ 24 февраля 2020

Я пытаюсь использовать 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;

 }

}

1 Ответ

0 голосов
/ 24 февраля 2020

Используйте то же самое 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;
    }
}

(хотите ли вы разделить «кеш» (порей) между рендерерами и политикой удаления кеша) оставлено в качестве упражнения.)

...