Non si aggiorna il JLabel

di il
4 risposte

Non si aggiorna il JLabel

Spiego tutto qui https://streamable.com/4mdaq
grazie
se vi interessa il codice
public ImageIcon sistema_dimensione_immagine_() {

        
         ImageIcon image = new ImageIcon(percorso_immagine);int diff1 = image.getIconWidth() - label_immagine.getWidth();
        int diff2 = image.getIconHeight() - label_immagine.getHeight();

        int h = 0;
        int w = 0;

        if (diff1 > 0 || diff2 > 0) {
            int percentuale = 1000;
            if (diff1 > diff2) {
                w = label_immagine.getWidth();
                int perce = w * percentuale / image.getIconWidth();
                h = perce * image.getIconHeight() / percentuale;

            } else {

                h = label_immagine.getHeight();
                int perce = h * percentuale / image.getIconHeight();
                w = perce * image.getIconWidth() / percentuale;

            }
            image = new ImageIcon(image.getImage().getScaledInstance(
                    w, h, Image.SCALE_DEFAULT));

        }  return image;
                
                
    }

4 Risposte

  • Re: Non si aggiorna il JLabel

    Ho scoperto che non entra proprio nella funzione label_immagineComponentResized(
    Se ingrandisco a tutto schermo la finestra o la rimpicciolisco ci entra se no no... Perché? Grazie!
  • Re: Non si aggiorna il JLabel

    Ho aggiornato.. https://streamable.com/08f8f aiuti? Grazie !
  • Re: Non si aggiorna il JLabel

    Il punto è: quando (e dove) richiami quel sistema_dimensione_immagine_() ? Perché evidentemente l'approccio non è fatto nel modo giusto (o nel posto giusto).

    In questi casi meglio magari scegliere un altro approccio. Ad esempio quello di farsi un banale JPanel custom che disegna la immagine in maniera scalata che sia "giusta" per la dimensione fisica del componente. L'algoritmo di scalamento è quello classico del "fit box".

    Guarda questo che ho scritto al volo (l'immagine è presa dal tutorial Oracle, non sapevo cosa altro referenziare ...).
    Prova a ridimensionare quanto/come vuoi la finestra, la immagine viene scalata mantenendo l'aspect-ratio e restando centrata.
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.net.MalformedURLException;
    import java.net.URL;
    
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    
    public class FrameProva extends JFrame {
        public FrameProva() {
            super("Prova");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
    
            try {
                ImageIcon imageIcon = new ImageIcon(new URL("https://docs.oracle.com/javase/tutorial/figures/2d/stonehenge.gif"));
                add(new ScalableImage(imageIcon));
            } catch (MalformedURLException e) {
                System.err.println(e);
            }
    
            pack();
            setLocationRelativeTo(null);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(() -> new FrameProva().setVisible(true));
        }
    }
    
    class ScalableImage extends JPanel {
        private ImageIcon imageIcon;
    
        public ScalableImage(ImageIcon imageIcon) {
            this.imageIcon = imageIcon;
        }
    
        @Override
        public Dimension getPreferredSize() {
            return new Dimension(imageIcon.getIconWidth(), imageIcon.getIconHeight());
        }
    
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
    
            double widthRatio = (double) getWidth() / imageIcon.getIconWidth();
            double heightRatio = (double) getHeight() / imageIcon.getIconHeight();
            double minRatio = Math.min(widthRatio, heightRatio);
            int w = (int) (imageIcon.getIconWidth() * minRatio);
            int h = (int) (imageIcon.getIconHeight() * minRatio);
            int x = (getWidth() - w) / 2;
            int y = (getHeight() - h) / 2;
    
            g.drawImage(imageIcon.getImage(), x, y, w, h, this);
        }
    }
  • Re: Non si aggiorna il JLabel

    Ma te l0ho fatto vedere da dove richiamo sistema_dimensione_immagine_ non hai visto il video?
Devi accedere o registrarti per scrivere nel forum
4 risposte