Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 25

Hybrid View

  1. #1
    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

  2. #2
    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

  3. #3
    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

  4. #4
    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

  5. #5
    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

  6. #6
    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

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

  8. #8
    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
    resta sempre la stessa immagine !!
    Allora ci deve essere dell'altro ... e senza vedere il codice, non è facile capire il problema. Ripeto: setIcon(null) rimuove di per sé la icona.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    codice:
      rimuoviFoto.addActionListener(new ActionListener(){
    
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    try {
                        riquadro.inserisciFoto(null);
                    } catch (IOException ex) {
                        Logger.getLogger(FormDatiOperatore.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
                
            });
    Ecco questo e il menu item del popup menu associato a riquadro( quest'ultimo è istandza di RiquadroFoto) !

  10. #10
    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
    Ecco questo e il menu item del popup menu associato a riquadro( quest'ultimo è istandza di RiquadroFoto) !
    Non questo ... qui non vedo nulla di errato. È nella tua classe del riquadro che presumo ci possa essere qualcosa che non quadra.


    P.S. l'unica cosa qui che potrei obiettare è che rimuovere la icona non ha nulla a che fare con un file e con IOException. Ma qui sei costretto a catturarla, perché inserisciFoto dichiara IOException dovuto solo al getCanonicalPath() che con un null non ci passerebbe.

    Quindi dovessi farlo io, renderei disponibile un altro metodo es. rimuoviFoto() che non ha problemi in tal senso.
    Ultima modifica di andbin; 26-06-2014 a 13:06
    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 © 2026 vBulletin Solutions, Inc. All rights reserved.