如何使用 JTable 鼠标单击事件将图像从 JTable 显示到 JLabel 或从数据库显示到 JLabel?

How to display Image form JTable into JLabel or from database to JLabel using JTable mouse click event?

这个问题可能已经在这里问过几次了,但我发现其中一些未解决 Retrieving image from mysql column to jlabel or to jtable

期望的输出:

如果我单击任何包含图像的特定行,那么它应该在 JLabel 内显示图像,但是如果该行不包含图像,那么标签应该显示 "No Photo Available".

下面是我目前用来显示从 JTablejlabelPhoto 的图像的代码行。

if(EmpDBTable.getValueAt(getData, 12) != null){
    try {               
         byte[] byteArray = (byte[]) EmpDBTable.getValueAt(getData, 12);
         ByteArrayInputStream bais = newByteArrayInputStream(byteArray);
         BufferedImage bImg = ImageIO.read(bais);
         ImageIcon icon = new ImageIcon(bImg.getScaledInstance(jLabelPhoto.getWidth(), jLabelPhoto.getHeight(), Image.SCALE_SMOOTH));
         jLabelPhoto.setIcon(icon);
         bais.close();
    } catch (Exception e) {
         JOptionPane.showMessageDialog(null, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
    }
}else{
    jLabelPhoto.setText("No Photo Available");
}

此代码允许我使用比例将图像正确显示到标签中,但问题是如果我单击其中没有图像的行,那么之前的图像仍然出现在标签上。

这里附上 link 视频以供正确说明。 https://vimeo.com/user101485383/review/351884404/57a10f86af

您的问题可能是因为您忘记在 else 块中将 JLabel 的图标设置为 null:

} else {
    jLabelPhoto.setText("No Photo Available");
    jLabelPhoto.setIcon(null);  // need to add this
}

如果这不能解决问题,那么您可能需要调试 if 块条件:

if(EmpDBTable.getValueAt(getData, 12) != null) {

也许持有的数据不是图像,但也不为空,但由于您持有所有数据和代码,因此需要时由您自行调试。