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

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

      }

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

最佳答案

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

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

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

关于java - 图像未在带渲染器的 Jtable 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28707247/

相关文章:

java - 你知道像 Swing 组件这样复杂的电子表格吗

java - 远程 OSGI 服务调用

java - 我在哪里可以找到 javax.swing.BorderLayout 类的源代码?

java - 如何从 JTable 中删除一行,同时将其保留在数据库中

java - 在 JtextArea 的末尾添加一个新行

java - 如何向 JScrollPane 添加水平/垂直滚动条

java - JTable 如何在 View 中隐藏列但将其保留在模型中以便在后台使用

java - NumberPicker 的格式化值在单击时消失

java - 优化 BufferedReader readLine() 操作

java - 添加标签 View android