Visualizzazione dei risultati da 1 a 8 su 8

Discussione: update ImagePAnel

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    14

    update ImagePAnel

    Salve ragazzi,ho un pikkolo problema,spero mi possiate aiutare.sto preparando un esame e devo utilizzare esclusivamente AWT,non posso utilizzare swing.Il mio problema è che ho un frame,sul quale a sinistra visualizzo l'elenco dei nomi di alcuni file(una lista) che sono immagini,ed in base alla selzione di uno di essi devo poter visualizzare l'immagine a destra.Il mio problema è che nel momento in cui scelgo un'immagine la prima volta questa mi viente visualizzata,ma se ne scelgo una seconda,l'immagine non viene aggiornata,o meglio viene aggiornata solo in parte perchè quella precedente sovrascive la nuva.Qualcuno può mostrarmi del codice per effettuare questo update?grazie

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

    Re: update ImagePAnel

    Originariamente inviato da Adelaide
    Qualcuno può mostrarmi del codice per effettuare questo update?grazie
    Innanzitutto magari mostra il codice che hai scritto ... che vediamo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    14
    Scusami ma sono nuova e non conosco bne nè il forum,e a quanto cedi neanche java
    Questa è la classe che deve disegnarmi l'immagine
    package tesiAWT;

    import java.awt.*;
    import java.awt.image.*;
    import java.io.*;
    import javax.imageio.*;

    public class Image2 extends Component {

    /**
    *
    */
    private static final long serialVersionUID = 1L;
    private BufferedImage img;

    public Image2(String filename) {

    setImageSource(filename);
    }

    public void paint(Graphics g){
    g.drawImage(img,0,0, null);

    }

    public void setImageSource(String filename){

    try{

    img = ImageIO.read(new File(filename));

    }
    catch(IOException ioex){

    System.out.println(ioex.getMessage());

    }

    }

    }



    ////////////////////
    Mentre questo è la parte di codice che gestisce la selezione dell'immagine dall'elenco e cerca di disegnarla


    elenco.setVisible(true);
    elenco.addMouseListener(new MouseAdapter()
    {
    public void mouseClicked(MouseEvent evt6)
    {
    //String dir="C:/Eclipse/workspace/Tesi/dir/";
    //TODO add your code for jPanel3.mouseClicked
    if (evt6.getClickCount() ==1)
    {
    int index =elenco.getSelectedIndex();
    {
    conn=new ClassSQL("root","");
    String[] no=conn.stampaFoto2(id/*,destinatario*/);
    bg=new Image[no.length];
    {
    try {
    bg[i]=ImageIO.read(new File("dir/"+no[i]));
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    Image2 g=new Image2("dir/"+no[index]);
    g.setVisible(true);
    add(BorderLayout.CENTER,g);
    g.repaint();

    }
    }
    }


    });

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Adelaide
    Questa è la classe che deve disegnarmi l'immagine
    Ti segnalo un po' di cose:
    a) In setImageSource() catturare la eccezione e stamparla non è un buon "design". Si dovrebbe farla uscire la eccezione, in modo che sia il chiamante a decidere cosa fare.

    b) In paint() è corretto fare come prima cosa un super.paint(g);

    c) In mouseClicked() (nota: non so perché hai voluto usare un MouseListener ... ma se ti va bene .... ok) istanzi un nuovo Image2. Se il tuo componente per la immagine è uno solo, sarebbe stato più corretto istanziarlo una volta sola, all'inizio nel momento della creazione della GUI e poi fare solamente dei setImageSource() quando serve.

    d) Il repaint() non va molto bene, concettualmente parlando, nel mouseClicked(). Non è dall'esterno che qualcuno deve dire: "componente, ridisegnati!!". È il componente stesso che dovrebbe "sapere" quando è opportuno ridisegnarsi. Insomma ... va "nascosto" all'interno del componente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    14
    ti ringrazio infinitamente,purtroppo sono una neofita di java e finora non ho avuto nessun aiuto.Sono riuscita ad aggiornare le immagini apportando le modifiche da te indicatemi,ora però avrei un altro problemino.Provo ad illustrarteloer quello che mi è stato richiesto le immagini sono caricate nel db mysql in un campo blob,ora sei io invece di caricarle in una directory temporanea volessi metterle in un array in maniera tale da non dover eliminare ogni volta,file e directory,quando non mi servono +(in quanto l'applicazione gestisce anche altre cose),come dovrei fare?
    Ti invio il codice così ti risulta + chiaro:
    Il tipo ImageViewerItem[] è un array di immagini;ho bisogno di rendere il codice meno complicato.

    public ImageViewerItem[] stampaFoto2(int id){
    ImageViewerItem[] items = null;
    try
    {
    pst = dbconnection.prepareStatement("SELECT NomeFoto,OggettoFoto FROM Fotografie where IdUtente=?");
    pst.setInt(1,id);
    res = pst.executeQuery();
    CancellaFile app=new CancellaFile();
    String dir=app.creaDir();
    File dir2 = new File ("./dir");
    while (res.next())
    {
    OutputStream fos = new java.io.FileOutputStream(new File(dir+ res.getString("NomeFoto")));
    InputStream fin = res.getBinaryStream("OggettoFoto");
    byte[] b = new byte[fin.available()];
    fin.read(b);
    fos.write(b);
    fos.flush();
    fos.close();
    }
    File[] files = dir2.listFiles (new Filtro ());
    items = new ImageViewerItem[files.length];
    for (int i = 0; i < files.length; i++)
    items[i] = new ImageViewerItem (files[i], -1, 80);
    }
    catch(Exception e)
    {
    System.err.println(e.getMessage());
    System.exit(1);
    }
    return items;

    }


    Ti ringrazio immensamente

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Adelaide
    le immagini sono caricate nel db mysql in un campo blob,ora sei io invece di caricarle in una directory temporanea volessi metterle in un array in maniera tale da non dover eliminare ogni volta,file e directory,quando non mi servono +(in quanto l'applicazione gestisce anche altre cose),come dovrei fare?
    Ti dò un indizio: c'è un read() di ImageIO che riceve un InputStream.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    14
    potresti darmi qualche altra indicazone?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Adelaide
    potresti darmi qualche altra indicazone?
    Tu ottieni un InputStream dal BLOB!!

    InputStream fin = res.getBinaryStream("OggettoFoto");

    P.S. il read() di ImageIO non chiude lo stream ... devi fare tu il close.
    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.