Visualizzazione dei risultati da 1 a 10 su 25

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    fatto ! però resta il problema che se ingrandisco il frame l'immagine non si ridimensiona!! come posso fare? ti posto il codice :
    codice:
    
    package jCallRemember.libreria;
    
    
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.awt.event.MouseListener;
    import java.io.File;
    import java.io.IOException;
    import javax.swing.ImageIcon;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    
    /**
     *
     * @author Linux
     */
    public class RiquadroFoto  extends JPanel{
        private JLabel labelFoto;
        private File fileFoto;
      
        public RiquadroFoto() {
            this.labelFoto=new JLabel();
            this.initComponents();
        }
        
        private void initComponents(){
            this.setLayout(new BorderLayout());
            this.add(labelFoto,BorderLayout.CENTER);
            this.setBackground(Color.white);
            
        }
        
        
    
    
        
        public void impostaMouseClick(MouseListener M){
            this.labelFoto.addMouseListener(M);
        }
    
    
        void inserisciFoto(File fileSelezionato) throws IOException {
            this.fileFoto=fileSelezionato;
            Image im=Toolkit.getDefaultToolkit().getImage(this.fileFoto.getCanonicalPath());
            Dimension dim=this.getPreferredSize();
            this.labelFoto.setIcon(new ImageIcon(im.getScaledInstance(dim.width, dim.height, Image.SCALE_SMOOTH)));
        }
        
    
    
        
    }
    codice:
    package jCallRemember.libreria;
    
    
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import javax.swing.JFrame;
    
    
    /**
     *
     * @author Linux
     */
    public class FormInsertOperatore extends JFrame{
        private RiquadroFoto riquadro;
        
        public FormInsertOperatore(){
            riquadro=new RiquadroFoto();
        }
        
        public void setup(){
            this.add(riquadro,BorderLayout.CENTER);
            this.riquadro.setPreferredSize(new Dimension(150,150));
            this.pack();
            this.setVisible(true);
            this.riquadro.impostaMouseClick(new ClickRiquadroFoto(this.riquadro));
        }
        
        
    }
    epoi c'è quello del click ma non penso ti interessi !

  2. #2
    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
    però resta il problema che se ingrandisco il frame l'immagine non si ridimensiona!!
    Credo di aver capito a cosa ti riferisci ma ... preferisco spiegarti bene cosa succede nel tuo codice.

    Hai messo 'riquadro' nella parte CENTER del BorderLayout di JFrame (del content pane, per essere corretti). Poi hai dato una dimensione "preferita" di 150x150 a 'riquadro'. Il pack() utilizza questa dimensione preferita, perché fa in modo che tutti i sotto-componenti siano alla loro dimensione preferita.

    Ma se ridimensioni il frame, la dimensione "fisica" del tuo riquadro dipende direttamente e solo dal frame. Non viene più sfruttata la dimensione preferita (che comunque come valore resta a 150x150).


    Inoltre aggiungo anche un'altra cosa: il getImage() di Toolkit usa un sistema di "cache" delle immagini. A parità di filename/url, restituisce lo stesso oggetto Image già precedentemente fornito. Se l'immagine nel frattempo è cambiata (il file è stato aggiornato), quando richiedi lo stesso filename/url ottieni la vecchia immagine in cache in memoria.
    Ci sono sostanzialmente 2 soluzioni a questo: "flushare" la immagine con il suo flush() oppure usare createImage() di Toolkit, che non usa alcun meccanismo di caching.
    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
    Jan 2014
    Messaggi
    305
    ti ringrazio però resta il fatto che non so come far ridimensionare l'immagine , quando ridimensiono il frame!

  4. #4
    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
    ti ringrazio però resta il fatto che non so come far ridimensionare l'immagine , quando ridimensiono il frame!
    Volendo continuare ad usare un JLabel e un ImageIcon, dovresti registrare su RiquadroFoto un ComponentListener. All'evento componentResized prendi la dimensione "reale", fisica del riquadro (getSize o getWidth+getHeight) e ridimensioni la immagine, crei un nuovo ImageIcon e lo risetti nel JLabel. Chiaramente la immagine originale (così com'era stata caricata) la devi tenere da parte, in un campo di istanza intendo).

    Un'altra soluzione sarebbe il custom painting. Ovvero niente JLabel/ImageIcon. Fai il paint "stretchato" della immagine ogni volta che il RiquadroFoto viene ridisegnato dal framework. Ma potrebbe risultare meno performante.
    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.