Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698

    [JAVA] Immagine di sfondo instabile

    Ho un JFrame, dentro al quale c'e' un JPanel che chiamerò A, e dentro ad A c'e' un altro JPanel che chiamerò B.

    Alla pressione di un bottono posto su A, in B viene caricata un'immagine di sfondo. I problemi con questa immagine sono i seguenti:

    1.L'immagine non viene visualizzata finchè non iconizzo (o nascondo) la finestra e poi la rimostro, evidentemente perchè il metodo paint non viene invocato altrimenti
    2.Una volta visualizzata l'immagine, se ad esempio trascino una qualunque finestrella sopra l'immagine questa viene "sfumata" e deformata, per poi tornare allo stato normale sempre chiudendo e riaprendo il frame.

    La classe che implementa il pannello B è fatta all'incirca cosi:

    codice:
    public class B extends JPanel {
        Image sfondo;
        public B() {sfondo = null;}
        
        public void paint (Graphics g) {
            if (sfondo!=null)
                g.drawImage(sfondo,0,0,this);
        }
    
        public void setSfondo (Image i) {sfondo = i;}
    }
    il metodo setSfondo viene invocato alla pressione del bottone apposito nel JPanel A.

    Immagino che una possibile soluzione sia ridisegnare l'immagine piu spesso, ma non so quando di preciso
    Come faccio a renderla stabile?

  2. #2
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Ciao; secondo per evitare il primo problema dopo aver premuto il bottone e aver disegnato l'immagine dovresti richiamare il metodo repaint(); per far ridisegnare il pannello (cosa che avviene quando iconizzi e poi ridimensioni il frame); il secondo punto non lo so.... non mi è mai capitato che io ricordi anche se è da un bel po' che non uso J2SE.
    Spero ti sia d'aiuto, ciao
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    uhm giusto non ci avevo pensato

    per il resto viene in mente a qualcuno come risolvere, o dove posso aver sbagliato?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Neanche a me è mai capitato... al massimo capita di avere il fastidiosissimo effetto di sfarfallio dell'immagine, ma non la deformazione.
    Un possibile modo per eliminare, comunque, il problema potrebbe essere quello di richiamare il metodo doLayout() sia sul pannello che visualizza l'immagine, che su quello che lo contiene. In teoria non dovrebbe avere effetti questa cosa, però potrebbe portare ad un repaint() forzato da parte del sistema, che potrebbe, quindi, ripristinare lo stato originale dell'immagine.
    E' solo un'idea, non garantisco che la cosa possa funzionare.


    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
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    mannaggia aspettavo con ansia la risposta di leleFT invece niente

    ma doLayout dove lo metto?

    e soprattutto, possibile che solo a me succeda questa cosa??

    codice:
    public class prova extends JPanel {
        public prova() {super();}
        
        public void paint (Graphics g) {
            Image sfondo = //getImage(...)
            g.drawImage(sfondo,0,0,this);
        }
    
        public static void main (String arg[]) {
            JFrame f = new JFrame();
            prova p = new prova();
            f.add(p);
            f.show();
        }
    }
    adesso sto facendo vari tentativi, ma cosi, giusto per curiosita...a voi questo codice funziona normalmente?

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    aggiungo un elemento fondamentale di cui mi sono accorto solo ora:

    il codice di cui sopra funziona correttamente se l'immagine copre tutto il jpanel. i problemi sorgono quando l'immagine copre solo una parte del panel stesso

    scusate la sbadataggine, non me ne ero accorto..

    le cose cambiano cosi?

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da Gil Mour
    mannaggia aspettavo con ansia la risposta di leleFT invece niente
    Aspettavi con ansia una mia risposta?

    ma doLayout dove lo metto?
    Io proverei a metterlo subito dopo aver settato l'immagine di sfondo. Qualcosa del genere:
    codice:
    prova p = new prova();
    p.setSfondo( ... );
    p.doLayout();
    // Se sei all'interno di un pannello, chiamerei anche un doLayout() sul pannello stesso

    e soprattutto, possibile che solo a me succeda questa cosa??

    codice:
    public class prova extends JPanel {
        public prova() {super();}
        
        public void paint (Graphics g) {
            Image sfondo = //getImage(...)
            g.drawImage(sfondo,0,0,this);
        }
    
        public static void main (String arg[]) {
            JFrame f = new JFrame();
            prova p = new prova();
            f.add(p);
            f.show();
        }
    }
    adesso sto facendo vari tentativi, ma cosi, giusto per curiosita...a voi questo codice funziona normalmente?
    A me il tuo codice non funziona, però ho notato che mi si deforma l'immagine se faccio uso di una classe come quella che tu hai scritto prima.
    Devo ammettere che è la prima volta che succede... cercherò soluzioni e, se ne trovo, le posto!

    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

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    Originariamente inviato da LeleFT
    Aspettavi con ansia una mia risposta?
    Beh si ho letto molti post dove risolvevi problemi di questo tipo
    Cosi volevo che risolvessi anche il mio ^^

    Ad ogni modo, per il momento mi limito a dilatare l'immagine su tutto il panel..se mai si scoprira come stabilizzare immagini piu piccole aggiorno altrimenti ciccia


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