Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    107

    Viasualizzare ImageIcon in un JPanel

    Ciao a tutti!!!!
    Questo è il mio problema: io ho un JFrame principale e vorrei visualizzare (disegnare) all'interno di un JPanel del JFrame dei miei JComponent formati da ImageIcon. Ora non basta aggiungere semplicemente questi JComponent da me realizzati al pannello affinchè vengano visualizzati al suo interno, ma cosa posso fare per visualizzarli???? Devo inserire le ImageIcon di ogni componente all'interno di JButton e poi aggiungerli al JPanel di destinazione oppure devo utilizzare il metodo paint(Graphics) per disegnare immagini (ma non so come fare a sapere il punto preciso di dove devono essere collocate le immagini) oppure c'è un altro modo più elegante???
    Grazie a tutti.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Viasualizzare ImageIcon in un JPanel

    Originariamente inviato da Azzurra85
    Questo è il mio problema: io ho un JFrame principale e vorrei visualizzare (disegnare) all'interno di un JPanel del JFrame dei miei JComponent formati da ImageIcon.
    Ha a che fare con quella questione del "pedice" che dicevi in un altra discussione??? (che già lì non era chiaro il tuo dubbio/problema).

    Originariamente inviato da Azzurra85
    Ora non basta aggiungere semplicemente questi JComponent da me realizzati al pannello affinchè vengano visualizzati al suo interno, ma cosa posso fare per visualizzarli????
    In che senso "non basta aggiungere"??? Se hai fatto un "tuo" componente che si disegna da sé (che funzioni correttamente .. è chiaro), basta aggiungerlo ad un "container". Dove sarà messo e con quale dimensione dipende se hai usato o no un layout manager e se sì quale.

    Originariamente inviato da Azzurra85
    Devo inserire le ImageIcon di ogni componente all'interno di JButton e poi aggiungerli al JPanel di destinazione oppure devo utilizzare il metodo paint(Graphics) per disegnare immagini (ma non so come fare a sapere il punto preciso di dove devono essere collocate le immagini) oppure c'è un altro modo più elegante???
    Vuoi fare un semplice componente che deriva da JComponent e che disegna un ImageIcon?
    La cosa più semplice e minimale che si possa fare è:

    codice:
    class ImageIconComponent extends JComponent {
        private ImageIcon imageIcon;
    
        public ImageIconComponent(ImageIcon imageIcon) {
            this.imageIcon = imageIcon;
            setPreferredSize(new Dimension(imageIcon.getIconWidth(), imageIcon.getIconHeight()));
        }
    
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            imageIcon.paintIcon(this, g, 0, 0);
        }
    }
    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
    Aug 2007
    Messaggi
    107
    Quello che manca al mio componente è proprio il fatto che non si disegna da sè e io vorrei che si disegnasse da sè come tutti i JComponent, ma non capisco che manca?????
    Mi sfugge qualcosa!!!!!!
    Il JPanel dove andranno a finire i miei JComponent ha un layout maneger di tipo FlowLayout con allignamento a sinistra.
    Si è sempre per il pedice, sono le ImageIcon di alcuni componenti che dovranno essere a pedice di altre ImageIcon di altri JComponent.
    Per farlo funzionare correttamente il mio JComponent cosa devo fare???

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Azzurra85
    Quello che manca al mio componente è proprio il fatto che non si disegna da sè e io vorrei che si disegnasse da sè come tutti i JComponent, ma non capisco che manca?????
    Dici che usi FlowLayout. Ok ma FlowLayout usa e rispetta il preferred size dei componenti!!! E JComponent per default ha un preferred size di 0 x 0, quindi se non lo imposti tu i tuoi componenti semplicemente non si vedono!!!
    Hai guardato il mio esempio sopra??
    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
    Aug 2007
    Messaggi
    107
    Funziona settando come mi dicevi tu il preferred size della mia ImageIcon del mio JComponent e riscrivendo il metodo paintComponent all'interno della mia classe per il mio componente.
    Nel caso io avessi JComponent costituito invece da un Jlabel, mi trovo di fronte allo stesso problema di visualizzazione. Io devo aggiungere il JComponent formato dal JLabel nel JPanel, ho settato il preffered size per JLabel e nel metodo paint che devo scrivere, ho provato ma non vedo niente!!!
    Il mio JLabel contiene solo una string.
    Che devo fare???

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Azzurra85
    Nel caso io avessi JComponent costituito invece da un Jlabel
    Cioè il JLabel è un "figlio" del tuo componente che estende JComponent??? (fai nel tuo componente un add(tuaLabel) o simile)

    Tieni presente che JComponent non ha un layout manager di default (non è come JPanel che ha per default un FlowLayout!). Quindi se il tuo JLabel è "figlio" del tuo componente: o imposti esplicitamente la posizione/dimensione del JLabel con setBounds() (o la coppia setLocation/setSize) o imposti un layout manager e lasci a lui il compito di posizionare/dimensionare il JLabel.
    Tutto dipende da dove/come deve essere messa questa JLabel nel tuo componente.

    Inoltre: il tuo componente ha solo un JLabel come figlio e non devi disegnare tu nulla? Perché se devi anche disegnare qualcosa sul Graphics ovviamente si complica, visto che c'è un componente figlio.
    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
    Aug 2007
    Messaggi
    107
    Io ho sostanzialmente questa classe:
    class JLabelComponent extends JComponent{
    private JLabel label;

    JLabelComponent(JLabel l){
    label = l;
    }
    }
    Aggiungo il mio JLabelComponent al mio JPanel e vorrei che una volta aggiunto venisse visualizzato nel pannello il JLabel del JLabelComponent che ho agggiunto al pannello.
    Ho provato a chiamare il metodo add(JLabel) all'interno del costruttore di questa classe settando come layoutmaneger del JLabel un JFlowLayout (come mi hai consigliato) ma non succede niente, non riesco ancora a visualizzare niente. Che cosa ho sbagliato??? Forse ho capito male i tuoi consigli????

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Azzurra85
    Io ho sostanzialmente questa classe:
    class JLabelComponent extends JComponent{
    private JLabel label;

    JLabelComponent(JLabel l){
    label = l;
    }
    }
    Come puoi forse immaginare, fare solo una cosa del genere, ovvero assegnare semplicemente un JLabel ad una variabile di istanza del tuo componente non vuol dire che il JLabel è contenuto fisicamente nella tua interfaccia utente!!!

    Originariamente inviato da Azzurra85
    settando come layoutmaneger del JLabel un JFlowLayout
    Non devi settare il layout manager del JLabel .... ma del "tuo" componente!!! Perché è questo che fa da "container" del JLabel!!!
    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
    Aug 2007
    Messaggi
    107
    In definitiva che devo fare affinchè il mio JLabelComponet si disegni da solo al momento che lo aggiungo al mio JPanel?????

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Azzurra85
    In definitiva che devo fare affinchè il mio JLabelComponet si disegni da solo al momento che lo aggiungo al mio JPanel?????
    Non ho ancora capito perché vuoi mettere un JLabel in tuo componente personalizzato .... ma a parte questo, la sostanza è questa: il tuo componente che estende JComponent deve fare da "contenitore" del JLabel, quindi devi fare sul tuo componente un add() passando il JLabel. Il JLabel va chiaramente posizionato/dimensionato. O imposti sul tuo componente un layout manager o assegni tu esplicitamente posizione/dimensione del JLabel.
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.