Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    immagine in jlabel (swing)

    Ciao ragazzi
    sono un po di giorni che cerco di venire a capo di questa spinosa questione:
    in pratica ho caricato in un database mysql delle immagini con un filechooser con selezione multipla.Fin qui tutto ok. Il problema si presenta quando voglio prelevare una di queste immagini e
    inserirla in una label.
    L'obiettivo sarebbe quello di creare una piccola fotogallery!!

    Help me please!!

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Ehm... E qual è il problema?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    In pratica non riesco a visualizzare l'immagine prelevata dal db in una jlabel.
    Ho provato così
    codice:
    FileChooserDemo2 fileChooserDemo2 = new FileChooserDemo2(veicolo); 
     int id = veicolo.getId();
     List<Foto> lista = DB.getFoto(id);
     Foto f = lista.get(0);
     ImageIcon icon = new ImageIcon(f.getFoto());
     lab.setIcon(icon);

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Ora, non sappiamo cosa faccia di preciso la classe DB. Si sa solo che restituisce una lista di oggetti "Foto", classe di cui non sappiamo nulla. Di questa classe usi il metodo getFoto() che dovrebbe restituire qualcosa da dare in pasto al costruttore di ImageIcon... cosa venga restituito non è dato a sapersi. Quindi, visto che il costruttore di ImageIcon può accettare:

    1) un array di byte
    2) un oggetto Image
    3) una stringa
    4) un URL

    dovremmo lavorare di fantasia e saperti dare delle indicazioni in merito?

    I dettagli: ciò che consente a noi di capire il problema e a te di ricevere una soluzione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Aggiungo...
    se lavori con le stringhe usi percorsi relativi o assoluti?
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  6. #6
    Scusate avete ragione...
    La classe DB gestisce le query e le connessioni con il database.
    Posto il codice:

    codice:
    public class DB { 
     Connection connection;
     Statement statement;
     ResultSet resultset;
     PreparedStatement ps;     
     Messaggi m = new Messaggi();      
    
    //connessione db
    private void connetti() {         
    try {             
    Class.forName("com.mysql.jdbc.Driver");             
    connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/foto?user=root&password=fausto&useUnicode=true&characterEncoding=UTF-8");             
    statement = connection.createStatement();         
    } catch (SQLException ex) {             
    m.mostraErrato("impossibile connettersi al DataBase" + ex);         
    } catch (ClassNotFoundException ex) {             
    m.mostraErrato("" + ex);         }     }      
    private void disconnetti() {         
    try {             
    connection.close();             
    statement.close();         
    } catch (SQLException ex) {             
    m.mostraErrato("" + ex);         }     }           
    
    //preleva array di foto
    public ArrayList getFoto(int id_veicolo) {         
    ArrayList listaFoto = new ArrayList();         
    try {             
    connetti();             
    String sql = "select * from foto where id_veicolo='" + id_veicolo + "'";
    resultset = statement.executeQuery(sql);             
    while (resultset.next()) {                 
    Foto foto = new Foto();                 
    foto.setId(resultset.getInt("id"));                 foto.setFoto(resultset.getBytes("foto"));                 foto.setDescrizione(resultset.getString("descrizione"));                 foto.setId_veicolo(resultset.getInt("id_veicolo"));                 
    listaFoto.add(foto );             
    }             
    disconnetti();         
    } catch (Exception ex) {             
    Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex);         
    }         return listaFoto;     }
    
    
    //aggiunge foto in db
    public boolean addFoto(Foto foto) {
        boolean ok;
            try {
                connetti();
                String sql = "select * from foto where descrizione='" + foto.getDescrizione() + "' and id = '" + foto.getId()+  "'  ";
                resultset = statement.executeQuery(sql);
                if (resultset.next() == false) {
                    String ins = "insert into foto(foto,id_veicolo,descrizione) values("
                            + "'" + foto.getFoto() + "',"
                            + "'" + foto.getId_veicolo()+  "',"
                            + "'" + foto.getDescrizione() + "'"
                            + ")";
                    statement.execute(ins);
                    disconnetti();
                    ok = true;
                } else {
                    ok = false;
                }
            } catch (Exception ex) {
                Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex);
                ok = false;
            }
            return ok;
        }    
    
    //class Foto
    public class Foto {
        
        private int id;
        private byte[] foto;
        private String descrizione;
        private int id_veicolo;
        
    
        public Foto() {
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public byte[] getFoto() {
            return foto;
        }
    
        public void setFoto(byte[] foto) {
            this.foto = foto;
        }
        
        public String getDescrizione() {
            return descrizione;
        }
    
        public void setDescrizione(String descrizione) {
            this.descrizione = descrizione;
        }
    
        public int getId_veicolo() {
            return id_veicolo;
        }
    
        public void setId_veicolo(int id_veicolo) {
            this.id_veicolo = id_veicolo;
        }
       
    }
    
    //class FileChooserDemo
    
    public class FileChooserDemo2 extends JPanel {
    
        private JFileChooser fc;
        private Veicolo veicolo;
        DB db = new DB();
    
        public FileChooserDemo2(Veicolo v) {
            this.veicolo = v;
            if (fc == null) {
                fc = new JFileChooser();
                fc.addChoosableFileFilter(new ImageFilter());
                fc.setAcceptAllFileFilterUsed(false);
                fc.setFileView(new ImageFileView());
                fc.setAccessory(new ImagePreview(fc));
                
                fc.setMultiSelectionEnabled(true);
            }
            int returnVal = fc.showDialog(FileChooserDemo2.this, "Seleziona foto...");
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File[] selection = fc.getSelectedFiles();
                for(File file : selection) {
               
                byte[] b = new byte[(int) file.length()];
                try {
                   FileInputStream fis = new FileInputStream(file);
                    try {
                        fis.read(b);
                    } catch (IOException ex) {
                        Logger.getLogger(FileChooserDemo2.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    try {
                        fis.close();
                    } catch (IOException ex) {
                        Logger.getLogger(FileChooserDemo2.class.getName()).log(Level.SEVERE, null, ex);
                    }
    
    
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(FileChooserDemo2.class.getName()).log(Level.SEVERE, null, ex);
                }
                
                //JOptionPane.showMessageDialog(null, file.length());
                Foto foto = new Foto();
                foto.setFoto(b);
                int idVeicolo = db.prendiIDVeicolo();
                foto.setId_veicolo(idVeicolo);
                db.addFoto(foto);
                }
            }
            fc.setSelectedFile(null);
        }
    }
    dopo aver caricato le immagini ne db vorrei prelevarne una in base all'id del veicolo e
    visualizzarla in una jlabel

  7. #7
    Nel codice ho inserito anche la classe foto e la classe filechooser.

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da marlonbrando
    codice:
    String ins = "insert into foto(foto,id_veicolo,descrizione) values("
             + "'" + foto.getFoto() + "',"
    Questo (segnato in rosso) è palesemente e profondamente errato. getFoto restituisce un array, gli array non ridefiniscono il toString() (resta quello in Object) e anche se lo facessero per il tuo caso non avrebbe comunque alcun senso.
    La stringa che ti risulta fuori è qualcosa del tipo es. ......values('[B@41675ec4', ....
    Perché quella è la forma fornita da toString() di Object per un byte[].

    Soluzione: usa un PreparedStatement (che ha setBytes).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9

    Risolto

    Ciao ragazzi
    Grazie dei preziosi consigli!!
    Sono riuscito a risolvere il mio problema.
    Volevo però chiedervi delucidazioni in merito ad un errore che si verifica se carico alcune immagini
    in formato jpg.
    L'errore è questo:
    codice:
    com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1540160 > 1048576)
    Grazie ancora!

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Risolto

    Originariamente inviato da marlonbrando
    L'errore è questo:
    codice:
    com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1540160 > 1048576)
    https://confluence.atlassian.com/dis...cket+for+MySQL
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.