如何在jtable中显示图片?

5gfr0r5j  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(532)

我有一个小问题,当我试图显示一个图像在一个细胞内的计算机 JTable ,它采用文本格式并显示图像本身。
例如 icon.toString() “返回:

我的代码:

  1. public void loading() {
  2. try {
  3. String[]title = {"First Name","Last Name","Picture"};
  4. String sql="select * from users";
  5. model = new DefaultTableModel(null,title);
  6. st = conn.createStatement();
  7. ResultSet rs = st.executeQuery(sql);
  8. String[]fila = new String[4];
  9. while(rs.next()){
  10. fila[0] = rs.getString("fna");
  11. fila[1] = rs.getString("lna");
  12. byte[] imgBytes = rs.getBytes("pic");
  13. Blob blob = new javax.sql.rowset.serial.SerialBlob(imgBytes);
  14. BufferedImage image = null;
  15. try (InputStream is = blob.getBinaryStream()) {
  16. image = ImageIO.read(is);
  17. ImageIcon icon = new ImageIcon(image);
  18. fila[2] = icon.toString();
  19. } catch (IOException exp) {
  20. exp.printStackTrace();
  21. }
  22. model.addRow(fila);
  23. }
  24. tbl.setModel(model);
  25. }
  26. catch (SQLException e) {
  27. JOptionPane.showMessageDialog(null, e.getMessage());
  28. }
  29. }

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

ncecgwcz

ncecgwcz1#

您需要重写tablemodel中的getcolumnclass(int col)方法,以便它为要显示imageicon的列返回imageicon.class,并将imageicon直接分配给fila[2]:

  1. public void loading() {
  2. try {
  3. String[]title = {"First Name","Last Name","Picture"};
  4. String sql="select * from users";
  5. model = new DefaultTableModel(null,title){
  6. @Override
  7. public Class<?> getColumnClass(int column) {
  8. if (column==2) return ImageIcon.class;
  9. return Object.class;
  10. }
  11. }
  12. st = conn.createStatement();
  13. ResultSet rs = st.executeQuery(sql);
  14. Object[]fila = new Object[4];
  15. while(rs.next()){
  16. fila[0] = rs.getString("fna");
  17. fila[1] = rs.getString("lna");
  18. fila[2] = new ImageIcon(rs.getBytes("pic"));
  19. model.addRow(fila);
  20. }
  21. tbl.setModel(model);
  22. }
  23. catch (SQLException e) {
  24. JOptionPane.showMessageDialog(null, e.getMessage());
  25. }
  26. }
展开查看全部

相关问题