Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312

    problema immagini su gui

    Salve a tutti,
    ho un problema di visualizzazione su di una gui. Sostanzialmente inserisco un'immagine in una Jlabel e la mostro. Dopo un po' di secondi un thread cambia questa immagine ma sulla swing mi viene sempre mostrata la prima. C'è un qualche refresh che bisogna fare o il problema è di altra natura?
    Grazie

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

    Re: problema immagini su gui

    Originariamente inviato da lio.b
    Dopo un po' di secondi un thread cambia questa immagine ma sulla swing mi viene sempre mostrata la prima.
    Senza vedere il codice che hai scritto, come/da dove carichi la immagine, come setti la immagine (parli di "un thread" ... che immagino non sia il EDT, quindi attenzione!!!) è quasi impossibile dire cosa non va.
    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
    Sep 2008
    Messaggi
    312
    è abbastanza banale...nel metodo run di un thread ho un ciclo while che visualizza un'immagine presa da un array... fa partire un thread che scarica l'immagine successiva a quella che sto visualizzando e la inserisce nella posizione successiva dell'array.
    Dopo una pausa di 10 secondi devo visualizzare la seconda immagine e così via. Ecco il framento di codice:
    codice:
    public class MainThread extends Thread {
        private JLabel foto;
        private JPanel center;
        private buffer immagini;
        private int courrent;
        private int dim;
        private ArrayList<String>file;
        private ArrayList<String>name;
    
        public MainThread(JPanel center,buffer immagini,int courrent,int dim,ArrayList file,ArrayList name){
            this.foto = new JLabel();
            this.center = center;
            this.immagini = immagini;
            this.courrent = courrent;
            this.dim = dim;
            this.name = name;
            this.file = file;
        }
        public void run(){
                while(courrent<dim-1 ){
                center.add(this.foto);
                try{
    
                ImageIcon i = new ImageIcon(immagini.get(courrent).getAbsolutePath());
                foto.setIcon(i);
                courrent++;
                ThreadTransferFile c = new ThreadTransferFile(file.get(courrent),name.get(courrent),immagini,courrent);
                c.start();
                sleep(10000);
                }
                catch(InterruptedException e){
                    e.printStackTrace();
                }
    
            }
        }

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da lio.b
    è abbastanza banale...
    Ma sbagliato.

    Innanzitutto aggiungi un nuovo componente (tra l'altro aggiungi sempre lo stesso identico componente!!! ... che ti serve?) dopo che il JPanel è sicuramente già visibile. E questo vuol dire che a seconda del layout manager usato nel panel dovresti anche "validare" il layout .... cosa che non hai proprio fatto.
    E comunque tutto questo lo fai nel contesto di un "tuo" thread che non è il EDT. E la regola fondamentale in Swing (chissà quante volte l'ho già ripetuto sul forum ....) è che salvo casi particolari documentati, l'accesso a qualunque componente della interfaccia utente (anche i "model" se non c'è una opportuna sincronizzazione) va fatto solo nel contesto del EDT.


    P.S. Quando posti del codice non "citarlo" (chi risponde non lo ritrova nella risposta) e postalo ben scritto/indentato tra i tag CODE.
    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
    Sep 2008
    Messaggi
    312
    scusami, ma non ci ho capito molto.
    Non so che sono gli edt. Uso sempre lo stesso componente perchè al centro della mia swing deve apparire un'immagine in una JLabel per cui, essendo la stessa,dovrebbe cambiare dato che gli ho messo un'altra immagine o no?l'immagine successiva deve sostituire la precedente.
    Non ho capito cosa dovrei fare

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Il tag da usare quando si posta del codice è CODE, non QUOTE.


    Ho corretto.


    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

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da lio.b
    Non so che sono gli edt.
    Male .... è la base per comprendere come funziona il disegno e il dispacciamento degli eventi e in generale Swing.

    Originariamente inviato da lio.b
    Uso sempre lo stesso componente perchè al centro della mia swing deve apparire un'immagine in una JLabel per cui, essendo la stessa
    Sì ma tu aggiungi ... add() sempre lo stesso componente. Cosa ti serve?

    Originariamente inviato da lio.b
    dovrebbe cambiare dato che gli ho messo un'altra immagine o no?
    E perché allora non cambi solo la proprietà icon??? Cioè ripeto: perché devi aggiungere il JLabel sé stesso ogni volta???
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Quindi mettendo la add() al di fuori del while risolvo?

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 © 2026 vBulletin Solutions, Inc. All rights reserved.