带有渲染器的 Jtable 中未显示图像

Image not showing in Jtable with renderer

我已经为我的 table 创建了一个 CellRenderer。 如果图像尺寸较小,则效果很好。 但是,如果它有点大,它会显示空白 space

 public  class ImageRenderer extends DefaultTableCellRenderer {
 JLabel lbl = new JLabel();
 JButton bouton ;

List<Commentaire> liste;
  ImageIcon icon ;
  Commentaire commentaire;


   // Increase the height of each row by 50% so we can see the whole
   // image.

    public ImageRenderer() {
         liste=  new CommentaireDAO().findCommentaire();
    }

@Override
  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
      boolean hasFocus, int row, int column) {

 if (column==0){
     int id = (int)value;
     Client c = new ClientDAO().findClientById(id);
     InputStream photo= c.getPhoto();
     try {
            if (photo != null) {
                int size = photo.available();
                byte[] imageBytes = new byte[size];
                photo.read(imageBytes);
                ImageIcon icon = new ImageIcon(imageBytes);
                Image img = icon.getImage();
                BufferedImage bi = new BufferedImage(img.getWidth(null),img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
                Graphics g = bi.createGraphics();
                g.drawImage(img, 0, 0, 50, 50, null);
                ImageIcon newIcon = new ImageIcon(bi);
                lbl.setSize(250,250);
                lbl.setHorizontalAlignment(CENTER);
                lbl.setIcon(newIcon);
            }else{
                System.out.println("photo null");
            }
        } catch (IOException ex) {
            Logger.getLogger(OffreClientGUI.class.getName()).log(Level.SEVERE, null, ex);
        }

      }

有什么方法可以调整图像的大小以适合列?

渲染器中的代码应该非常快速和高效。您不应该在每次渲染单元格时都进行处理以创建图像。

相反,您应该在 TableModel 中存储一个 ImageIcon。然后,您将 TableModel 的 getColumnClass(...) 方法重写为 return Icon.class,JTable 将为图标使用默认的 table 渲染器。

如果您想动态缩放图标,您可以向 TableModel 添加一个 Stretch Icon