Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    83

    [JAVA] JFrame con immagine di sfondo

    Salve a tutti ho un problema che non riesco a capire da cosa è dovuto, forse perchè non so mettere un immagine di sfondo ad una JFrame.

    il codice è il seguente:

    import java.awt.*;
    import javax.swing.*;
    import java.awt.color.*;
    import java.awt.image.BufferedImage;

    public class menuPrincipale extends JFrame{

    Picture image = new Picture("./springfild.jpg");
    JLabel titolo = new JLabel("CONSILGI DAI SIMPSON");
    JPanel pannello = new JPanel();

    public menuPrincipale(){
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(640, 480);
    this.setResizable(true);
    pannello.add(titolo)
    this.setContentPane(pannello);
    }

    public void paint(Graphics g) {
    //Immagine di Sfondo
    BufferedImage img = image.getImage();
    g.drawImage(img,10,10,this);
    super.paint(g);
    }
    }

    Ora devo far apparire la label "titotolo" sopra l'immagine come faccio?
    se tolgo super.paint(g) immagine di sfondo copre gli elementi, viceversa se lo metto.

    Chiedo a tutti voi il vostro gentilissimo aiuto, sperando che conoscete la soluzione.

    Cmq se il mio codice sopra è totalmente sbagliato sono accettati qualsiasi consiglio che mi porti quel risultato.

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    160
    super.paint(g) deve essere la prima riga della funzione paint, puoi provare a disegnare sul contentpane invece che sulla finestra...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    83
    Ho provato a mettere super.paint(g) come prima istruzione, ma nemmeno va.

    Puoi spiegarmi meglio come si fa per disegnare sul contentpane invece della finestra?

    Cmq io ho provato anche con questo this.getContentPane().add(titolo); ma niente.

    Tutti i risultati che ho ottenuto sono che l'immagine, almeno credo, mi copre la labal.

    Se ti va puoi modificare stesso tu la classe in modo che funzioni,te ne sarei grato.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    160
    codice:
    Graphics g2=this.getContentPane().getGraphics();
    BufferedImage img = image.getImage();
    g2.drawImage(img,10,10,this);
    così disegni l'immagine sul pannello e non sulla finestra.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    83
    Sei stato gentilissimo, il tuo aiuto mi è stato enorme, non potresti mai immaginare che soddisfazione, il tuo consigli mi ha aperto la mente, mi hai fatto capire una grande cosa.

    Ecco la mia soluzione finale:

    classe ImgPan carica l'immagine e disegna il pannello:

    import javax.swing.*;
    import java.awt.*;

    public class ImgPan extends JPanel {
    Image img1;

    public ImgPan(){
    Toolkit tk = Toolkit.getDefaultToolkit();
    img1 = tk.getImage("./springfild.jpg");
    MediaTracker mt = new MediaTracker(this);
    mt.addImage(img1, 1);
    // aggiunta di eventuali altre immagini
    try { mt.waitForAll(); }
    catch (InterruptedException e){}
    }
    public void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawImage(img1, 0, 0, null);
    /* Immagine (img1), posizione nel pannello (0,0)
    e un oggetto (null, cioè nessuno) a cui notificare
    l'avvenuto caricamento */
    }
    }

    classe menuprincipale la quale crea un pannello disegnato e ci aggiungo le componenti sopre

    import java.awt.*;
    import javax.swing.*;
    import java.awt.color.*;
    import java.awt.image.BufferedImage;

    public class menuPrincipale extends JFrame{

    JLabel titolo = new JLabel("CONSILGI DAI SIMPSON");
    ImgPan pannello = new ImgPan();

    public menuPrincipale(){
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(640, 480);
    this.setResizable(true);
    pannello.add(titolo);
    this.setContentPane(pannello);
    }
    }

    ed in fine il main che mi avvia il tutto
    public class start {
    public static void main(String[] v){
    menuPrincipale f = new menuPrincipale();
    f.show();
    }
    }



    Ti sarò infinitamente grato

    Cmq mi vedrai molto presto ancora su questo forum perchè sicuramente nasceranno altri problemi.

    Spero che questa soluzione sia utile a qualcuno.

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.