Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [JAVA] Icone personalizzate e visualizzazione immagine errata

    Ciao a tutti,

    Volevo presentarvi un problema che mi sta capitando, con la speranza di un aiuto su come risolvere. Sto cercando di creare delle icone personalizzate che raffigurando un rettangolo di dimensione 200 x 200. Ho creato il main che con i metodi principali per creare la GUI così:

    codice:
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import javax.swing.ImageIcon;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JLabel;    
    
    
    
    
    public class ImageIconLabel
    {
        private JFrame f;
        private MyIcon disegno, disegno2;    
    
    
        public ImageIconLabel() 
        {
    
    
            f = new JFrame("Visualizzazione Immagine");
            disegno = new MyIcon(10, 40);
            disegno2 = new MyIcon(300, 300);
            
            f.setContentPane(disegno); // l'etichetta personalizzata è inserita sul muro grezzo
            f.setContentPane(disegno2); // l'etichetta personalizzata è inserita sul muro grezzo
            f.setSize(1024,768);
            f.setVisible(true);
            f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        }
    
    
        public static void main(String [] args)
        {
            new ImageIconLabel();
        }
    } // fine applicazione
    Ho creato successivamente la mia classe MyIcon che estende il componente generico JComponents e crea l'oggetto MyIcon con le coordinate appropriate per l'immagine. La classe ridefinisce anche il metodo protected "paintComponent()" di JComponent che ha il compito di disegnare la mia immagine personalizzata.

    codice:
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import javax.swing.ImageIcon;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    
    
    class MyIcon extends JComponent
    {
        private ImageIcon icon;
        private String url="http://www.disi.unige.it/person/MoggiE/LI03/lez6/images/verde.gif";
        private int x, y;
        
        public MyIcon(int x, int y)
        {
            
                icon = new ImageIcon(path);
                
                this.x = x;
                this.y = y;
            
                // cartella immagini in sottocartella con bytecode
        }
        
    
    
        public void paintComponent(Graphics g) 
        {
             super.paintComponent(g);
             icon.paintIcon(this, g, this.x, this.y); // disegno posizionato rispetto alla cornice
        } 
    }
    Tutto funziona se io creo un oggetto di tipo MyIcon, l'immagine viene disegnata nelle coordinate corrette, ma se creo due o più oggetti io visualizzo solo la seconda immagine, in questo caso l'oggetto disegno2. Come posso risolvere per poter disegnare più immagini contemporaneamente?

    Grazie mille a tutti
    Ciao
    luca31989

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da luca31989 Visualizza il messaggio
    codice:
            f.setContentPane(disegno); // l'etichetta personalizzata è inserita sul muro grezzo
            f.setContentPane(disegno2); // l'etichetta personalizzata è inserita sul muro grezzo
    se creo due o più oggetti io visualizzo solo la seconda immagine, in questo caso l'oggetto disegno2
    La questione è sui due setContentPane. Il "content pane" è un componente (JFrame ha per default un JPanel come content pane) che è quello in cui si inseriscono solitamente tutti gli altri componenti della interfaccia.
    Il content pane però è anche sostituibile con setContentPane. Ma è appunto UNO solo. Quindi è ovvio che il secondo setContentPane sostituisce quello precedente che hai messo.

    Quello che ti serve è disporre più componenti secondo certi criteri di posizionamento/dimensionamento. Affronta quindi l'argomento dei layout manager.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Ciao andbin,

    grazie per il chiarimento, ho risolto semplicemente con un lista orinata di JLabel disposte in coordinate diverse, per poi aggiungerle al main frame. Non so se è la cosa più corretta.
    luca31989

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da luca31989 Visualizza il messaggio
    ho risolto semplicemente con un lista orinata di JLabel disposte in coordinate diverse, per poi aggiungerle al main frame. Non so se è la cosa più corretta.
    Si chiama "posizionamento assoluto", il disporre i componenti senza un layout manager esplicitando per ognuno posizione E dimensione. Sbagliato, tecnicamente parlando, non lo è. Ma si usa raramente o per scenari particolari.

    Se per te va bene e risolve .... ok. Ma per molte altre situazioni non potrai fare a meno di imparare, prima o poi, i layout manager.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java 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 © 2024 vBulletin Solutions, Inc. All rights reserved.