【问题标题】:How to display a picture in a JTable?如何在 JTable 中显示图片?
【发布时间】:2015-10-16 08:27:13
【问题描述】:

尝试在JTable 的单元格内显示图像时,我遇到了一个小问题,这采用文本格式并显示图像本身。

例如icon.toString()" 返回:

我的代码:

public void loading() {
    try {
        String[]title = {"First Name","Last Name","Picture"};

        String sql="select * from users";
        model = new DefaultTableModel(null,title);
        st = conn.createStatement();
        ResultSet rs = st.executeQuery(sql);
        String[]fila = new String[4];

        while(rs.next()){
            fila[0] = rs.getString("fna");
            fila[1] = rs.getString("lna");
            byte[] imgBytes = rs.getBytes("pic");
            Blob blob = new javax.sql.rowset.serial.SerialBlob(imgBytes);
            BufferedImage image = null;
            try (InputStream is = blob.getBinaryStream()) {
                image = ImageIO.read(is);
                ImageIcon icon = new ImageIcon(image);
                fila[2] = icon.toString();
            } catch (IOException exp) {
                exp.printStackTrace();
            }
            model.addRow(fila);
        }
        tbl.setModel(model);
    }
    catch (SQLException e) {
        JOptionPane.showMessageDialog(null, e.getMessage());
    }
}

有人知道如何更正代码吗?

【问题讨论】:

标签: java image swing jtable blob


【解决方案1】:

您需要覆盖 TableModel 中的 getColumnClass(int col) 方法,以便它为要显示 ImageIcon 的列返回 ImageIcon.class,并将 ImageIcon 直接分配给 fila[2]:

public void loading() {
    try {
        String[]title = {"First Name","Last Name","Picture"};
        String sql="select * from users";
        model = new DefaultTableModel(null,title){
            @Override
            public Class<?> getColumnClass(int column) {
                if (column==2) return ImageIcon.class;
                return Object.class;
            }
        }
        st = conn.createStatement();
        ResultSet rs = st.executeQuery(sql);
        Object[]fila = new Object[4];
        while(rs.next()){
            fila[0] = rs.getString("fna");
            fila[1] = rs.getString("lna");
            fila[2] = new ImageIcon(rs.getBytes("pic"));            
            model.addRow(fila);
        }
        tbl.setModel(model);
    }
    catch (SQLException e) {
        JOptionPane.showMessageDialog(null, e.getMessage());
    }
}

【讨论】:

  • 我已经通过多种方式实现了这一点,但没有得到任何结果。当我使用fila[2] = new ImageIcon (image); 如果没有放置toString 我得到一个错误
  • 朋友这个选项真的帮助了我不知道我有多感激,我有一个多星期的工作时间!谢谢你,里卡多!
猜你喜欢
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 2020-06-08
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多