Изображение не отображается в java swing, когда я нажимаю на свою Jtable

#java #sql #image #swing #jtable

#java #sql #изображение #swing #jtable

Вопрос:

Я хочу выполнить поиск изображения и отобразить его в JLabel (имя метки tampilFoto ), а затем сохранить его как большой двоичный объект в базе данных, и это работает, и когда я хочу показать изображение в метке, когда пользователь нажимает на JTable (имя таблицы tblBalon ), но изображение не отображается, и при нажатии на метку ошибка не отображается.

Вот код для загрузки изображения:

 private void tblFotoActionPerformed(java.awt.event.ActionEvent evt) {                                        
    JFileChooser chooser = new JFileChooser();
    chooser.showOpenDialog(null);
    File f = chooser.getSelectedFile();
    String sumberFile = f.getAbsolutePath();
    sumberFoto.setText(sumberFile);
    ImageIcon icon = new ImageIcon(sumberFile);
    Image image = icon.getImage().getScaledInstance(tampilFoto.getWidth(), tampilFoto.getHeight(), Image.SCALE_SMOOTH);
    tampilFoto.setIcon(icon);
}
  

Вот код для отображения изображения в ярлыке при нажатии на таблицу:

 private void tblBalonMouseClicked(java.awt.event.MouseEvent evt) {                                      
    try {
        int row = tblBalon.getSelectedRow();
        nim.setText(tblBalon.getValueAt(row, 1).toString());
        nama.setText(tblBalon.getValueAt(row, 2).toString());
        fakultas.setSelectedItem(tblBalon.getValueAt(row, 3).toString());
        prodi.setSelectedItem(tblBalon.getValueAt(row, 4).toString());
        noUrut.setSelectedItem(tblBalon.getValueAt(row, 5).toString());
        calon.setSelectedItem(tblBalon.getValueAt(row, 6).toString());
        visi.setText(tblBalon.getValueAt(row, 7).toString());
        misi.setText(tblBalon.getValueAt(row, 8).toString());
        sumberFoto.setText(tblBalon.getValueAt(row, 9).toString());
        String tampil = "SELECT * FROM databalon WHERE idBalon='" row "';";
        ResultSet rst = stk.executeQuery(tampil);
        byte[] image =null;
        if(rst.next()){
            Blob img = rst.getBlob("foto");
            image = img.getBytes(1,(int)img.length());
            BufferedImage imag = ImageIO.read(new ByteArrayInputStream(image));
            ImageIcon ft = new ImageIcon(imag);
            tampilFoto.setIcon(RImage(ft));
        }
    } catch (SQLException | IOException ex) {
        Logger.getLogger(PanitiaDataBalon.class.getName()).log(Level.SEVERE, null, ex);
    }
    
    this.btnHapus.setEnabled(true);
    this.btnUbah.setEnabled(true);
    this.btnTambah.setEnabled(false);
    this.btnBatal.setEnabled(true);
}
  

Что-то не так с моим кодом?

Комментарии:

1. Вам также следует рассмотреть возможность использования ResultSet#getBinaryStream

2. img.getBytes(1,(int)img.length()); — Разве это не должно начинаться с 0 и нет 1 . Я бы также проверил результат, если img.length

3. @MadProgrammer итак, я должен сделать так, чтобы код стал таким img.getBinaryStream(1,(int)img.length()); ?

4. Вы действительно должны прочитать JavaDocs