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

时间:2015-02-24 22:04:09

标签: java swing jtable imageicon tablecellrenderer

我为我的桌子创建了一个CellRenderer。 如果图像尺寸小,它可以正常工作。 但是,如果它有点大,它会显示我的空白

 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);
        }

      }

是否有任何方法可以调整图像大小以适应列?

1 个答案:

答案 0 :(得分:2)

渲染器中的代码应该非常快速有效。每次渲染单元格时,都不应该进行处理来创建图像。

相反,您应该在TableModel中存储ImageIcon。然后重写TableModel的getColumnClass(...)方法返回Icon.class,JTable将使用Icon的默认表格渲染器。

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