#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