Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 25
  1. #11
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Con il painting diretto della immagine sulla superficie del RiquadroFoto, non servirebbero più né il JLabel né il ImageIcon.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #12
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    se osservi bene io utilizzo il paintComponent per modificare anche il jlabel e ottenere una nuova istanza scalta dell'immagine . l'unico problema è che adesso non so più perchcè ma il metodo setbackground non funziona !

  3. #13
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    se osservi bene io utilizzo il paintComponent per modificare anche il jlabel
    Ma non servirebbe più .....

    Scritto (e abbozzato) al volo:

    codice:
    public class RiquadroFoto extends JPanel {
        private Image imgFoto;
        
        .....
        
        public void caricaImmagine(File file) {
            // ..... carica immagine e assegna a imgFoto.
            
            repaint();
        }
        
        
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(imgFoto, 0, 0, getWidth(), getHeight(), this);
        }
    
        .....
    }

    Grosso modo è proprio tutto qui ....

    E infine:
    1) nota che paintComponent è, originalmente in JComponent, protected. Se non ci sono motivi davvero reali, è bene tenerlo protected!
    2) super.paintComponent(g); .... non super.paintComponents(g);
    paintComponents è per altro.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #14
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    scusa se ti disturbo mi potresti spiegare un po la differenza tra paintcomponent , paint e update!! grazie

  5. #15
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    scusa se ti disturbo mi potresti spiegare un po la differenza tra paintcomponent , paint e update!! grazie
    Questo: Painting in AWT and Swing spiega di più e meglio (di quanto potrei fare qui io).
    Ma se vuoi posso farti un mini condensato stile bignami ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #16
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Questo: Painting in AWT and Swing spiega di più e meglio (di quanto potrei fare qui io).
    Ma se vuoi posso farti un mini condensato stile bignami ...
    te ne sarei grato

  7. #17
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Ok, rispondo adesso con un breve riassunto del painting.

    Il metodo paint(Graphics) dei componenti grafici esiste fin dall'inizio di AWT, cioè praticamente da sempre.

    I Componenti AWT sono "heavyweight", cioè hanno la loro finestra nativa e sono quindi disegnati dal sistema operativo. Quando AWT determina che un componente deve essere ridisegnato (tutto o in parte), viene invocato paint(Graphics). Esiste in AWT anche update(Graphics). La distinzione tra i due esiste perché c'è differenza tra il painting "system-triggered" a "app-triggered". Nel primo caso succede quello che ho detto prima: è paint che viene direttamente invocato.
    Quando invece è l'applicazione che richiede un ridisegno con repaint(), viene causata l'invocazione di update, che per default fa nient'altro che invocare paint. Ridefinendo update c'è la possibilità di effettuare un painting "incrementale".

    In Swing (dove i componenti sono "lightweight", disegnati da codice Java) le cose vanno un po' diversamente. Innanzitutto nei componenti Swing il paint(Graphics) esiste comunque ancora, perché è solo quello il metodo che rappresenta il "contesto" di disegno del componente.
    Il paint tuttavia fattorizza (suddivide) il lavoro di disegno in 3 fasi, rispettivamente e in quest'ordine:
    - paintComponent(Graphics g)
    - paintBorder(Graphics g)
    - paintChildren(Graphics g)

    In Swing il "contesto" di disegno in cui si può fare del custom painting è paintComponent. paint non andrebbe ridefinito (se non per casi davvero particolari e sapendo bene che cosa si sta facendo). Gli altri due metodi paintBorder/paintChildren sono già implementati in modo standard e generalmente non sono mai da ridefinire.
    La tecnica del painting "incrementale" tramite update() non va più usata, in pratica lavorando con i componenti Swing ci si può del tutto dimenticare dell'esistenza di update().

    Questo grosso modo è il concetto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #18
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Ho un problema sempre col riquadro , se provo a rimuovere la icon dalla jlabel essa resta,
    codice:
     public void inserisciFoto(File fileSelezionato) throws IOException {
            if(fileSelezionato!=null){
                this.fileFoto=fileSelezionato;
                this.foto=Toolkit.getDefaultToolkit().createImage(this.fileFoto.getCanonicalPath());
                Dimension dim=this.getPreferredSize();
                this.labelFoto.setIcon(new ImageIcon(foto.getScaledInstance(dim.width, dim.height, Image.SCALE_SMOOTH)));
            }
            else {
                this.labelFoto.setIcon(null);
                this.labelFoto.revalidate();     
                this.labelFoto.repaint();
    
       }
        }
    Ultima modifica di linux_r; 26-06-2014 a 11:45

  9. #19
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    Ho un problema sempre col riquadro , se provo a rimuovere la icon dalla jlabel essa resta
    Se hai usato JLabel+Icon (quindi niente custom painting), l'unica cosa che conta per rimuovere la icona è:

    this.labelFoto.setIcon(null);

    Il resto revalidate / repaint è del tutto superfluo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #20
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    resta sempre la stessa immagine !!

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.