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

Agents de placement/Fenêtres Java Discussion :

[JFrame] Image en fond de JFrame


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Points : 139
    Points
    139
    Par défaut [JFrame] Image en fond de JFrame
    Voila, j'ai suivi et utilisé le tuto GUI, et j'ai rajouté qq lignes pour rajouter 2 boutons et les Layout qui vont bien avec.
    Seulement, mes boutons n'apparaissent pas...
    voici le code :
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    package evolution;
     
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
     
    import javax.swing.*;
     
    public class JPanelImageBgTest extends JFrame
    {
     
    	protected JPanel pIntro,intro,pManu,pAuto,p1,p2;
    	protected JButton auto;
    	protected JButton manu;
     
    	JPanelImageBgTest(String titre, int mode )
    	{	
    		super(titre);
     
                    //début du code que j'ai rajouté
     
    		pIntro=new JPanel(new BorderLayout());
    		intro=new JPanel(new BorderLayout());
    		pManu=new JPanel(new FlowLayout());
    		pAuto=new JPanel(new FlowLayout());
    		p1=new JPanel(new FlowLayout());
    		p2=new JPanel(new FlowLayout());
     
    		intro.setPreferredSize(new Dimension(80,20));
    		pManu.setPreferredSize(new Dimension(68,72));
    		pAuto.setPreferredSize(new Dimension(68,72));
    		p1.setPreferredSize(new Dimension(200,200));
    		p2.setPreferredSize(new Dimension(200,200));
     
    		manu=new JButton("Mode Manuel");
    		auto=new JButton("Mode Automatique");
    		pManu.add(manu);
    		pAuto.add(auto);
    		intro.add("North",pManu);
    		intro.add("South",pAuto);
    	//	intro.add(fdIntro);
    		pIntro.add("North",p1);
    		pIntro.add("South",p2);
    		pIntro.add("Center",intro);
    		add(pIntro);
     
    		setAlwaysOnTop(true);
    		// fin du code que j'ai rajouté
     
    		this.setContentPane(new JPanelImageBg("./evolgenfdbleu2.jpg",mode));
    		this.getContentPane().add(new JButton("test"));
    		setSize(1000,530);
    		this.setVisible(true);
    		addWindowListener(new ExitListener());
    	}
     
     
     
     
    	public static void main( String[] argv )
    	{	//new JPanelImageBgTest("Centre",JPanelImageBg.CENTRE);
    		new JPanelImageBgTest("Texture",JPanelImageBg.TEXTURE);
    	}
     
     
     
     
    }
    Actuellement, tout ce que je vois, c'est mon image. Les boutons sont ils "écrasés par la texture" ?

  2. #2
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Efface purement et simplement tout ce qui est au dessus de this.setContentPane(new JPanelImageBg("./evolgenfdbleu2.jpg",mode)), qui à première vue ne sert à rien, et relance le logiciel ; tu devrais voir ton panneau avec l'image et dessus un bouton Test.

    Est-ce juste ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Points : 139
    Points
    139
    Par défaut
    négatif, pas de bouton Test, rien que mon fond d'écran jpg.

  4. #4
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Est-ce que tu peux faire une classe simple, autonome, qui compile, qui selon toi devrait fonctionner mais qui ne fonctionne pas, et nous l'envoyer qu'on voye ?

  5. #5
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 257
    Points : 308
    Points
    308
    Par défaut
    Salut,

    tu ne defini pas de layout sur "this" et essais aussi de faire un pack().

    ++

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Points : 139
    Points
    139
    Par défaut
    bah voila, je te remets les 2 classes. En gros, ce que je voudrais avoir, c'est 2 boutons (Manuel et Automatique), par dessus une image de fond.

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    package evolution;
     
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import javax.swing.*;
     
    public class JPanelImageBgTest extends JFrame
    {
     
    	protected JPanel pIntro;
    	protected JPanel intro;
    	protected JPanel pManu;
    	protected JPanel pAuto;
    	protected JPanel p1;
    	protected JPanel p2;
    	protected JButton auto;
    	protected JButton manu;
     
    	JPanelImageBgTest(String titre, int mode )
    	{	
    		super(titre);
    		******************
    		pIntro=new JPanel(new BorderLayout());
    		intro=new JPanel(new BorderLayout());
    		pManu=new JPanel(new FlowLayout());
    		pAuto=new JPanel(new FlowLayout());
    		p1=new JPanel(new FlowLayout());
    		p2=new JPanel(new FlowLayout());
     
    		intro.setPreferredSize(new Dimension(80,20));
    		pManu.setPreferredSize(new Dimension(68,72));
    		pAuto.setPreferredSize(new Dimension(68,72));
    		p1.setPreferredSize(new Dimension(200,200));
    		p2.setPreferredSize(new Dimension(200,200));
     
    		manu=new JButton("Mode Manuel");
    		auto=new JButton("Mode Automatique");
    		pManu.add(manu);
    		pAuto.add(auto);
    		intro.add("North",pManu);
    		intro.add("South",pAuto);
    	//	intro.add(fdIntro);
    		pIntro.add("North",p1);
    		pIntro.add("South",p2);
    		pIntro.add("Center",intro);
    		this.getContentPane().add(pIntro);
    ************************************
    		setAlwaysOnTop(true);
     
    		this.setContentPane(new JPanelImageBg("./evolgenfdbleu2.jpg",mode));
    		//this.getContentPane().add(new JButton("test"));
    		setSize(1000,530);
     
    //		this.setLayout(new BorderLayout());
    		this.setVisible(true);
    		addWindowListener(new ExitListener());
    	}
     
     
     
     
    	public static void main( String[] argv )
    	{	//new JPanelImageBgTest("Centre",JPanelImageBg.CENTRE);
    		new JPanelImageBgTest("Texture",JPanelImageBg.TEXTURE);
    	}
     
     
     
     
    }
    La classe avec la méthode paint
    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
    54
    55
     
    package evolution;
     
    import java.awt.*;
    import java.awt.image.*;
    import javax.swing.*; 
     
    public class JPanelImageBg extends JComponent
    {
    	private int mode;
    	private TexturePaint texture; 
    	private BufferedImage bufferedImage; 
     
    	public static final int CENTRE = 0;
    	public static final int TEXTURE = 1;
     
    	JPanelImageBg( String fileName, int mode )
    	{	this.mode = mode;
    		this.bufferedImage = this.toBufferedImage(Toolkit.getDefaultToolkit().getImage(fileName));
    		this.texture = new TexturePaint(bufferedImage,new Rectangle(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight())); 
    	} 
     
    	public void paintComponent(Graphics g)
    	{	switch( mode )
    		{	case TEXTURE :
    				Graphics2D g2d = (Graphics2D)g; 
    				g2d.setPaint(texture);
    				g2d.fillRect(0, 0, getWidth(), getHeight() );
    				break;
    			case CENTRE :
    				g.setColor(this.getBackground());
    				g.fillRect(0,0,getWidth(), getHeight() );
    				g.drawImage(bufferedImage,(getWidth()-bufferedImage.getWidth())/2,(getHeight()-bufferedImage.getHeight())/2,null);
    				break;
    			default :
    				super.paintComponents(g);
    		}
    	}
     
     
    	private BufferedImage toBufferedImage(Image image)
    	{	image = new ImageIcon(image).getImage(); 
     
    		BufferedImage bufferedImage = new BufferedImage( image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB); 
    		Graphics g = bufferedImage.createGraphics(); 
     
    		g.setColor(Color.white); 
    		g.fillRect(0, 0, image.getWidth(null), 
    		image.getHeight(null)); 
    		g.drawImage(image, 0, 0, null); 
    		g.dispose(); 
    		return bufferedImage; 
    	}
     
    }
    PS : j'ai essayé de commenter la ligne this.setContentPane(new JPanelImageBg("./evolgenfdbleu2.jpg",mode));
    dans ce cas là, j'ai mon bouton Test qui remplit tout le panel...
    NB : tout le code entre ***, ce sont mes 2 boutons. actuellement, je les gérais depuis mon IHM, et ça donnait ça :



    or, si j'insère mon Panel pintro en faisant this.getContentPane().add(pintro);, ça me donne ça :

    et encore, le bouton "Automatique" n'est pas visible du premier coup, il faut que je passe ma souris sur le bouton "Manuel" pour que l'autre apparaisse...

    Bref, je suis pas sorti...

  7. #7
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Cela fonctionne de la façon ci-dessous, mais j'avoue ne pas trop savoir pourquoi cela ne fonctionne pas comme tu avais fait ; je présume un micmac entre contentPane, constructeur, dispatching thread etc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    JPanelImageBgTest(String titre, int mode )
    {	
    	super(titre);
            JComponent pan;
     
            pan = new JPanelImageBg("./evolgenfdbleu2.jpg",mode);
            pan.setLayout(new FlowLayout());
            pan.add(new JButton("OK"));
            this.setContentPane(pan);
    	setSize(1000,530);
     
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Points : 139
    Points
    139
    Par défaut
    euh... je suis sous Eclipse, quand je fais Run, la jvm se lance, et dans la seconde qui suit, le process est "Terminated". 'Comprends pas...
    Et redémarrer Eclipse n'a rien changé...
    Mais pourquoi il ne se passe rien? ça marche chez toi? avec les mêmes classes? quel est ton main?
    moi j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public static void main( String[] argv )
    	{	
    		new JPanelImageBgTest("Centre",JPanelImageBg.CENTRE);
    		new JPanelImageBgTest("Texture",JPanelImageBg.TEXTURE);
    	}

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Points : 139
    Points
    139
    Par défaut
    sinon, j'ai voulu essayer autrement, et surtout plus simplement, vu que je n'ai pas tout compris dans le code du tuto.
    j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    protected URL urlFondIntro;
    protected ImageIcon fondIntro;
     
    public Interface(String titre) {
     
    urlFondIntro = getClass().getResource("./evolgenfdbleu2.jpg");
    fpIntro=new JFrame("Evolution Génétique"){
    		public void paint (Graphics g) {  
    			super.paint(g); 
    		        g.drawImage(fondIntro.getImage(), 0, 0, fpIntro); //l. 361
    		} 
    };
    et j'ai une NullPointerException qui sort, a priori, ce serait à cause du chemin, mais pourtant, il est bon...

  10. #10
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 257
    Points : 308
    Points
    308
    Par défaut
    essai de mettre le chemin complet voir si cela change qqc ?

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Points : 139
    Points
    139
    Par défaut
    si je mets le chemin absolu,

    "C:\Documents and Settings\PC MiKL\workspace\Evolution\evolgenfdbleu2.jpg"

    eclipse râle (invalid espace sequence (valid ones after \b \t \n \n \f \r \" \' \\)

    et si je mets le path de l'image,

    "/Evolution/evolgenfdbleu2.jpg"

    , bah j'ai la même erreur...

  12. #12
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 257
    Points : 308
    Points
    308
    Par défaut
    le caractère \ est un caractère special il faut donc que tu mette un caractère d'echapement devant :

    "C:\\Documents and Settings\\PC MiKL\\workspace\\Evolution\\evolgenfdbleu2.jpg"

  13. #13
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Points : 446
    Points
    446
    Par défaut
    Le caractère \ est un caratère spécial. Si tu veux l'utiliser en tant que caractère "normal", il te faut le déspécialiser en le faisant précéder d'un \
    Tu obtiens ainsi : C:\\Document and Settings\\ ...

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Points : 139
    Points
    139
    Par défaut
    Ok, je le savais, mais j'ai pas pensé que c'est ce qu'Eclipse me disait avec son message d'erreur. De toute façon, ça n'a pas changé d'un yota. Même en fournissant le chemin absolu de mon image :

    "C:\\Documents and Settings\\PC MiKL\\workspace\\Evolution\\evolgenfdbleu2.jpg"

    , j'ai le même message d'erreur (voir image ci dessus).

  15. #15
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Le main que j'ai utilisé, dans JPanelImageBgTest :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public static void main( String[] argv ) throws Exception
    {
      JPanelImageBgTest jp = new JPanelImageBgTest("Texture",JPanelImageBg.TEXTURE);
      jp.setVisible(true);
    }

Discussions similaires

  1. JFrame image de fond.
    Par Shadorc dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 19/07/2013, 15h49
  2. Réponses: 6
    Dernier message: 08/05/2008, 17h05
  3. [Swing]Image en fond de JFrame+ objets par dessus
    Par matt92700 dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 16/01/2006, 15h12
  4. JFrame ayant pour fond une Image (centrée ou en mosaïque)
    Par mariogarcia dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 22/12/2005, 01h01
  5. Comment mettre une image en fond de JFrame
    Par marc26 dans le forum Débuter
    Réponses: 3
    Dernier message: 19/01/2004, 17h57

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