Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di burm87
    Registrato dal
    Aug 2009
    Messaggi
    30

    [JAVA] Ridimensionare ImageIcon

    Ciao, ho bisogno di far visualizzare un'immagine all'interno di un JPanel e al momento ho adottato questa soluzione che funziona:
    codice:
    JFrame myFrame = new JFrame("Nuovo");
    myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel1 = new JPanel();
    ImageIcon pic = new ImageIcon("path/cavallo.jpeg");
    panel1.add(new JLabel(pic));
    myFrame.add(panel1);
    myFrame.pack();
    myFrame.setVisible(true);
    Il mio problema è che se, ovviamente, l'immagine cambia dimensioni lo fa di conseguenza il JPanel. Esiste un modo per poter cambiare le dimensioni dell'immagine in modo che possa stare dentro ad un JPanel di dimensioni fisse? Oppure esiste un Component apposito per le immagini che faccia in automatico questo resize?

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Aldila' del tuo problema in generale e di possibili migliori implementazioni, se il tuo pannello ha una dimensione fissa, la classe Image ha il metodo getScaledInstance che restituisce un'immagine scalata. Se hai solo l'ImageIcon, puoi ricavarne un'Image col metodo getImage, mentre viceversa puoi usare setImage o un costruttore.

  3. #3
    Ad ogni modo se io prendo un JPanel e con .setSize (int, int) gli dò la grandezza che voglio io, poi questo non mi cambia grandezza se ci metto dentro un ImageIcon...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Gil1688
    Ad ogni modo se io prendo un JPanel e con .setSize (int, int) gli dò la grandezza che voglio io, poi questo non mi cambia grandezza se ci metto dentro un ImageIcon...
    setSize serve solo quando il componente viene messo in un contenitore che non ha un layout manager (=posizionamento assoluto).
    Se c'è un layout manager, valgono preferredSize e/o minimumSize e/o maximumSize a seconda del layout manager e dell'area trattata.
    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 L'avatar di burm87
    Registrato dal
    Aug 2009
    Messaggi
    30
    Originariamente inviato da Kaamos
    Aldila' del tuo problema in generale e di possibili migliori implementazioni, se il tuo pannello ha una dimensione fissa, la classe Image ha il metodo getScaledInstance che restituisce un'immagine scalata. Se hai solo l'ImageIcon, puoi ricavarne un'Image col metodo getImage, mentre viceversa puoi usare setImage o un costruttore.
    Grazie per la risposta. Tu come mi consiglieresti di fare per utilizzare un'implementazione migliore?
    Comunque ho provato ad aggiungere questo:
    codice:
    Image j = pic.getImage();
    j = j.getScaledInstance(Image.SCALE_FAST, 400, 300);
    pic.setImage(j);
    Però l' "immagine" che ne risulta è altissima e strettissima, ho messo tra virgolette perchè non si capisce neppure che è un'immagine..

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da burm87
    codice:
    j = j.getScaledInstance(Image.SCALE_FAST, 400, 300);
    non si capisce neppure che è un'immagine..
    Image.SCALE_FAST dà priorità alla velocità piuttosto che alla qualità. E inoltre, se vuoi che sia mantenuto l'aspect-ratio devi fare qualche calcolo (se la dimensione non è nota a priori).
    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 L'avatar di burm87
    Registrato dal
    Aug 2009
    Messaggi
    30
    Originariamente inviato da andbin
    Image.SCALE_FAST dà priorità alla velocità piuttosto che alla qualità. E inoltre, se vuoi che sia mantenuto l'aspect-ratio devi fare qualche calcolo (se la dimensione non è nota a priori).
    Ho provato anche DEFAULT e tutte le altre possibilità.. I secondi due parametri non sono le dimensioni finali? Quindi se ho un'immagina 800x600 dovrebbe dimezzarmi le dimensioni, o sbaglio?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da burm87
    I secondi due parametri non sono le dimensioni finali?
    Per sicurezza sono andato a vedere sul javadoc. No.

    getScaledInstance(int width, int height, int hints)

    Quindi getScaledInstance(Image.SCALE_FAST, 400, 300) è sbagliato.
    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 L'avatar di burm87
    Registrato dal
    Aug 2009
    Messaggi
    30
    Originariamente inviato da andbin
    Per sicurezza sono andato a vedere sul javadoc. No.

    getScaledInstance(int width, int height, int hints)

    Quindi getScaledInstance(Image.SCALE_FAST, 400, 300) è sbagliato.
    Ecco qual'era il problema, ora va, grazie mille!

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