IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

Comment mettre une image en fond de JFrame [FAQ]


Sujet :

Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Comment mettre une image en fond de JFrame
    Salut a tous !
    Je voudrais mettre une image en fond d'une JFrame. J'ai regardé dans la FAQ et j'ai trouvé cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class MonPanel extends JComponent {
     
            /* variable de classe contennant l'image à afficher en fond */
            private Image bg;
     
            /* Surcharge de la fonction paintComponent() pour afficher notre image */
             public void paintComponent(Graphics g) {
                    g.drawImage(bg,0,0,null);
            } 
    }
    Et voici mon code qui appelle la JFrame dans laquelle je voudrais mettre une image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
     
    import java.awt.*;
    import java.awt.event.*;
     
     
    public class eh_Nak implements WindowListener
    {
     public static void main (String[] args)
     {
      theApp = new eh_Nak();
      theApp.init();
     
     
     }
     
     public void init()
     {
       window = new EsquisseFrame("titre");
     
       Toolkit leKit = window.getToolkit();
       Dimension wndSize = leKit.getScreenSize();
     
      window.setBounds((wndSize.width/wndSize.width)-1, (wndSize.height/wndSize.height)-1,
                       wndSize.width, wndSize.height);
     
      window.addWindowListener(this);
      window.setVisible(true);
     
     
     }
     
     public void windowClosing(WindowEvent e)
     {
       window.dispose();
       System.exit(0);
     }
     
     public void windowOpened(WindowEvent e){}
     public void windowClosed(WindowEvent e){}
     public void windowIconified(WindowEvent e){}
     public void windowDeiconified(WindowEvent e){}
     public void windowActivated(WindowEvent e){}
     public void windowDeactivated(WindowEvent e){}
     
     
     private static EsquisseFrame window;
     private static eh_Nak theApp;
     
     
     
     
    }
    Je suis débutant en Java et donc je voudrais savoir comment inclure le premier code (celui de la FAQ) dans mon code.

    Merci d'avance

  2. #2
    Membre émérite
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Points : 2 999
    Points
    2 999
    Par défaut
    Bonjour,
    Je suppose que EsquisseFrame est une classe dérivant de JFrame. Dans ce cas, dans son constructeur tu peux toujours redéfinir le contentPane et lui appliquer la méthode. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class Test extends JFrame{
    	private Image fond;
    	public Test(){
    		super("Test");
    		fond = Toolkit.getDefaultToolkit().getImage("./tonFond.jpg");
    		try{
    			MediaTracker mt = new MediaTracker(this);
    			mt.addImage(fond,0);
    			mt.waitForAll();
    		}catch(Exception e){e.printStackTrace();}
    		setContentPane(new ContentPane(fond));
    		getContentPane().add(new JLabel("Bonjour"));
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setSize(400,400);setLocationRelativeTo(null);setVisible(true);	
    	}
    	private class ContentPane extends JPanel{
    		private Image image;
    		public ContentPane(Image leFond){super();image=leFond;}
    		public void paintComponent(Graphics g){g.drawImage(image,0,0,null);}
    	}  
    	public static void main(String[] args){new Test();}
    }
    Bonne chance.
    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

  3. #3
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 897
    Points
    1 897
    Par défaut
    Ce code ajoute une image au centre d'un JPanel (lui-même ajouté à une JFrame) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    import java.awt.*;
    import javax.swing.*;
     
    public class ImagePanel extends JPanel
     {
       public Image image;
       BorderLayout borderLayout1 = new BorderLayout();
     
       public ImagePanel()
       {
         image = Toolkit.getDefaultToolkit().getImage("image.jpg");
        try
        {
          jbInit();
        }
        catch(Exception e)
        {
          e.printStackTrace();
        }
       }
     
       public void paintComponent(Graphics g)
       {
         super.paintComponent(g);
     
         int imageWight = image.getWidth(this);
         int imageHeight = image.getHeight(this);
     
         g.drawImage (image, 0, 0, null);
         repaint();
       }
      private void jbInit() throws Exception
      {
        this.setLayout(borderLayout1);
      }
     }
    Il ne te reste plus qu'à dimensionner l'image aux dimension du contenant : voir FAQ Java.

    Salut.
    La connaissance ne sert que si elle est partagée.
    http://ms2i.net

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Salut a tous et d'abord merci !
    J'ai toujours un petit probleme (malgre que j'ai reussi a mettre une image en fond.
    Voila mon code de ma Frame principale ( j'ai enlevé toutes les items , boutons, écouteurs);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    public class  EsquisseFrame extends JFrame
    {
     
    private Image fond;
     
     
      public EsquisseFrame(String titre)
      {
     
     
        fond = Toolkit.getDefaultToolkit().getImage("C:\\bae.jpg");
              try{
                 MediaTracker mt = new MediaTracker(this);
                 mt.addImage(fond,0);
                 mt.waitForAll();
              }catch(Exception e){e.printStackTrace();}
     
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setJMenuBar(menuBar);
     
    setContentPane(new ContentPane(fond));
        getContentPane().add("North", bar);
     
    //Ajouter la barre de Menu et la barre d'outils
      JMenuBar menuBar = new JMenuBar();
      JToolBar bar = new JToolBar();
     
     
    }
     
     
     
     
                  class ContentPane extends JPanel{
                       private Image image;
                       public ContentPane(Image leFond){super();image=leFond;}
                       public void paintComponent(Graphics g){g.drawImage(image,0,0,null);}
                    }

    Le probleme est que la barre d'outil s'affiche en haut de la fenetre mais pas sur toute la ligne :
    Elle ne s'affiche qu'au milieu.

    Comment faire pour la mettre sur toute la largeur de l'ecran ?
    Merci d'avance

Discussions similaires

  1. comment mettre une image de fond sur un bouton ?
    Par neufrdb dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 17/04/2011, 13h21
  2. Comment mettre une image en fond d'un TStringGrid
    Par blondelle dans le forum C++Builder
    Réponses: 5
    Dernier message: 25/11/2008, 19h13
  3. Réponses: 6
    Dernier message: 08/05/2008, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo