Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    Mettere immagine di sfondo ad un jpanel:possibile?

    salve gente... piacere mi kiamo carlo e sono uno studente di ing informatika alle prese con un progettino di laboratori odi programmazione....
    stò realizzando il gioco della scopa, a dire il vero è quasi finito solo che adesso mi è sorto un dubbio...
    allora il mio schermo è diviso da 3 panel che estendono jpanel di 800x200 su di cui poi vengono posizionate le carte che vengono selezionate mischiate ecc... adesso come sfondo a questo jpanel vorrei dare un immagine dello sfondo color legno tramite un immagine jpeg che ho trovato su google... allora fin adesso l'ho setteto con il colore blu ma nn riesco a settare l'immagine per sfondo!!!! potete aiutarmi? vi riporto la parte in questione...

    ------Codice-------------------------------------------------------------
    public class Panel extends JPanel {
    private static final long serialVersionUID = 1L;
    private Border border;
    private TitledBorder titledBorder;
    private String title;


    public Panel(String t)
    { //Invoca il costruttore della super classe
    super();
    //Setta le proprieta del pannello
    border = new EtchedBorder(EtchedBorder.RAISED, Color.BLUE, Color.BLUE);
    title = t;
    titledBorder = new TitledBorder(border, title);
    this.setBorder(titledBorder);
    this.setPreferredSize(new Dimension(800, 200));
    setBackground(Color.CYAN);


    }
    ------------Fine codice---------------------------

    vorrei al poso cel setBackground mettere un immagine di sfondo e lasciarla sotto le carte che verranno poi disposte sul tavolo..ieri smanettando ero riuscito ad inserirla ma le carte venivano affiancate all'immagine, e nn su quest'ultima... vi prego datemi una mano che martedì ho la consegna!!! ve ne sarò grato a vita!!!
    grazie saluti

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

    Re: Mettere immagine di sfondo ad un jpanel:possibile?

    Originariamente inviato da astra190cv
    vorrei al poso cel setBackground mettere un immagine di sfondo e lasciarla sotto le carte che verranno poi disposte sul tavolo
    Visto che estendi JPanel, fai l'override di paintComponent(), in cui disegnerai la immagine come/dove ti pare. Chiaramente dovrai avere un oggetto Image ed usare l'oggetto Graphics che il metodo paintComponent() riceve.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ciao... grazie per la risposta ma nn ho capito bene come fare...
    public class Panel extends JPanel {
    private static final long serialVersionUID = 1L;
    private Border border;
    private TitledBorder titledBorder;
    private String title;
    private Image image=null;



    public void ImagePanel(){
    image = Toolkit.getDefaultToolkit().getImage("carte/sfondo.JPG");
    MediaTracker tracker = new MediaTracker(this);
    tracker.addImage(image, 0); //aggiunge image all'elenco d'immagini da caricare
    try{ tracker.waitForID(0);} //attende che siano caricate tutte le immagini con l'id specificato
    catch (InterruptedException exception) {}
    }


    public void paintComponent(Graphics g){
    super.paintComponent(g);
    // acquisisce le dimensioni dello schermo
    // La classe Toolkit iteragisce con il sistema operativo
    Toolkit kit = Toolkit.getDefaultToolkit();
    Dimension screenSize = kit.getScreenSize(); //restituisce la dimensione dello schermo come oggetto Dimension
    int screenHeight = screenSize.height / 2; //Ottieni la metà della lunghezza dello schermo
    int screenWidth = screenSize.width / 2; //Ottieni la metà della larghezza dello schermo
    // disegna l'immagine
    int centroAscissaImage=screenWidth - image.getWidth(null)/2; //Metà larghezza schermo (400) meno metà larghezza immagine, ottenendo l'ascissa del centro dell'immagine
    int centroOrdinataImage=screenHeight - image.getHeight(null)/2;//Metà lunghezza schermo (300) meno metà lunghezza immagine, ottenendo l'ordinata del centro dell'immagine
    g.drawImage(image,centroAscissaImage,centroOrdinat aImage,null);

    }//paintComponent


    public Panel(String t){
    //Invoca il costruttore della super classe
    ImagePanel();
    //super();
    //Setta le proprieta del pannello
    border = new EtchedBorder(EtchedBorder.RAISED, Color.BLUE, Color.BLUE);
    title = t;
    titledBorder = new TitledBorder(border, title);
    this.setBorder(titledBorder);
    this.setPreferredSize(new Dimension(800, 200));
    //setBackground(Color.lightGray);

    }

    potresti aiutarmi a modificarlo tu? nn sò come impostare il tutto...ho paura di far danni...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Ecco un esempio completo che mostra un panel in cui l'immagine viene "ripetuta" su tutta la superficie.

    codice:
    import java.awt.*;
    import java.net.*;
    import javax.imageio.*;
    import javax.swing.*;
    
    public class TestFrame extends JFrame
    {
        public TestFrame (Image img)
        {
            super ("Test Background Panel");
    
            setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
            setSize (300, 300);
    
            JPanel panel = new BackgroundPanel (img);
    
            add (panel);
        }
    
        public static void main (String[] args)
        {
            try
            {
                URL imageUrl = new URL ("http://img502.imageshack.us/img502/4725/grey036qf9.jpg");
    
                final Image img = ImageIO.read (imageUrl);
    
                SwingUtilities.invokeLater (new Runnable ()
                {
                    public void run ()
                    {
                        TestFrame f = new TestFrame (img);
                        f.setVisible (true);
                    }
                });
            }
            catch (Exception e)
            {
                System.out.println (e);
            }
        }
    }
    
    
    class BackgroundPanel extends JPanel
    {
        private Image img;
    
        public BackgroundPanel (Image img)
        {
            this.img = img;
        }
    
        public void paintComponent (Graphics g)
        {
            Dimension panelSize = getSize ();
            int width = img.getWidth (this);
            int height = img.getHeight (this);
    
            for (int y = 0; y < panelSize.height; y += height)
            {
                for (int x = 0; x < panelSize.width; x += width)
                {
                    g.drawImage (img, x, y, this);
                }
            }
        }
    }
    P.S.: nell'esempio ho caricato l'immagine da un URL ma ovviamente si può anche caricare da altre sorgenti, es. da un file.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    scusate la domanda che sembrerà stupida ma per caricare un'immagine da file devo utilizzare ImageIcon?
    AIUTOOOOOOOOOOOOOOO

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    @astra190cv: il regolamento, al punto 6, indica per filo e per segno che vanno usati (e come vanno usati) i tag CODE per il posting del codice. Per favore, applica quanto scritto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    scusa Lele non potresti rispondere alla mia domanda?
    AIUTOOOOOOOOOOOOOOO

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da caciucco
    scusa Lele non potresti rispondere alla mia domanda?
    Mi sono accorto solo ora che ti sei agganciato ad una discussione già esistente.

    Per rispondere alla tua domanda è sufficiente consultare la documentazione di ImageIcon e fare una prova, non ci vuole molto.

    Dalla documentazione, il sesto ed il settimo costruttore prendono, non a caso, il percorso di un file.

    Non è che sei obbligato ad usare ImageIcon, ci sono altri modi per poter caricare un'immagine: se fai una ricerca qui nel forum troverai metodi che usano la classe Toolkit, altri esempio utilizzano ImageIO...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    si ok in realtà avevo già spulciato un po le api ma il compilatore mi da un errore, il pezzo di programma è questo:
    codice:
     try
            {
                ImageIcon imageUrl = new ImageIcon ("dkdkdk.jpeg");
    
                final Image img = ImageIcon.read (imageUrl);
    
                SwingUtilities.invokeLater (new Runnable ()
                {
                    public void run ()
                    {
                        TestFrame f = new TestFrame (img);
                        f.setVisible (true);
                    }
                });
            }
    ma mi da errore sul .read posto anche l'errore:

    codice:
    E:\Programmazione\LAVORI_JCREATOR\TestFrame.java:26: cannot find symbol
    symbol  : method read(javax.swing.ImageIcon)
    location: class javax.swing.ImageIcon
                final Image img = ImageIcon.read (imageUrl);
                                           ^
    1 error
    
    Process completed.
    per leggere un imageicon non devo fare .read("....") ?????

    grazie per l'attenzione
    AIUTOOOOOOOOOOOOOOO

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da caciucco
    per leggere un imageicon non devo fare .read("....") ?????

    grazie per l'attenzione
    Mi sembrava di essere stato più che chiaro nel messaggio precedente: io ho parlato di costruttori, non di metodi read() che non esistono e che, se esistessero, andrebbero usati su oggetti istanziati. Se vuoi avere un oggetto Image, allora (sempre nella documentazione che già ti ho linkato) dovrai usare il metodo getImage().

    codice:
    ImageIcon icona = new ImageIcon("percorso al tuo file");
    
    // Se poi vuoi un oggetto Image:
    Image img = icona.getImage();
    Più banale di così...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.