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 :

Affichage en arrière plan dans une fenêtre Jframe


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2017
    Messages : 19
    Par défaut Affichage en arrière plan dans une fenêtre Jframe
    Bonjour,
    Débutant dans la programmation JAVA, j'ai réalisé un début de programme d'affichage d'objets. J'obtiens une fenêtre Jframe 1920*1200 composée de divers "curseurs" déplaçables sur fond noir.
    J'ai effectué énormément de recherches pour trouver la solution adéquat à mon problème : afficher en "fond d'écran" une image .png. Le soucis principal est que cette image doit bien être en arrière plan par rapport aux autres "ObjetsJeux". Et je ne trouve pas de méthode/classe résolvant mon problème.
    Etant nouveau sur ce genre de forum je n'ai pas trouvé d'autre solutions que de vous mettre mon code en PJ.
    Merci d'avance pour vos réponses.

    Curseur.java.txt
    Fenetre.java.txt
    Handler.java.txt
    ID.java.txt
    Jeux.java(Main).txt
    KeyInput.java.txt
    ObjetJeux.java.txt

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Il suffit de prendre un JPanel, de redéfinir sa méthode paintComponent pour y faire le dessin (avec un simple Graphics.drawImage), et ensuite de mettre tous les autre composants dans ce panel.

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2017
    Messages : 19
    Par défaut
    Voilà comment j'ai modifié ma classe Fenetre :

    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
    package jeux;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import java.awt.Dimension;
     
    public class Fenetre extends JFrame {
     
    	private static final long serialVersionUID = 3823162937106336209L;
     
    	public Fenetre (int longueur, int largeur, String titre, Jeux jeux){
     
    		JFrame fenetre = new JFrame(titre);
    		fenetre.setUndecorated(true);
    		fenetre.setPreferredSize(new Dimension(longueur, largeur));
    		fenetre.setMaximumSize(new Dimension(longueur, largeur));
    		fenetre.setMinimumSize(new Dimension(longueur, largeur));
    		fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		fenetre.setResizable(false);
    		fenetre.setLocationRelativeTo(null);
    		fenetre.add(jeux);
    		fenetre.setAlwaysOnTop(true);
    		fenetre.setVisible(true);
     
    		JPanel panel = new JPanel();
    		this.setContentPane(panel);
    		this.setVisible(true);
    	    this.setContentPane(new Fond());
     
    		jeux.start();
    	}
    }
    Et voilà donc la classe 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
    package jeux;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.io.File;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
    import javax.swing.JPanel;
     
    public class Fond extends JPanel { 
     
    	private static final long serialVersionUID = 2290215993065771323L;
     
    	public void paintComponent(Graphics g){
    		    try {
    		      Image img = ImageIO.read(new File("C:/Users/Askiarsh/Desktop/eclipse/jeux/src/jeux/img/earth_map_ocean_continents_1920x1200.jpg"));
    		      g.drawImage(img, 0, 0, this);
    		    } catch (IOException e) {
    		      e.printStackTrace();
    		    }                
    	 }
    }
    La classe Main reste inchangée.
    Je n'obtiens néanmoins ni erreurs ni résultat : toujours une fenêtre à fond coloré (avec mes curseurs déplaçables).

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Oula, tu mélange des choses là:

    Ton constructeur Fenetre.... crèe une deuxième JFrame séparée qu'il affiche. Déjà ce n'est pas bon. Ensuite, dans ce constructeur, tu définis allègrement certaines choses sur Fenetre (le Fond), d'autres sur le JFrame que tu viens de créer (la taille, le jeux, la visibilité). Résultat, ton Fond est appliqué sur un objet séparé, après le setVisible et probablement dans une fenetre de taille 0x0 pixels cachée derrière ton autre fenetre que tu as défini comme always on top.

    Donc
    1) retirer ce new JFrame, il n'a pas de raison d'être
    2) définir le contentPane (setContentPane) avant d'ajouter d'autres objet. Sinon ils seront ajoutés à l'ancien ContentPane
    3) définir taille et autres sur l'objet Fenetre lui même.
    4) ce ne devrait pas être la responsabilité de la fenêtre de démarrer le jeu, mais de l'appelant

    Ce qui devrait donner un truc du style:

    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
    public Fenetre (int longueur, int largeur, String titre, Jeux jeux){
     
        super(titre);
        setUndecorated(true);
        setPreferredSize(new Dimension(longueur, largeur));
        setMaximumSize(new Dimension(longueur, largeur));
        setMinimumSize(new Dimension(longueur, largeur));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setLocationRelativeTo(null);
        setContentPane(new Fond());
        add(jeux);
        setAlwaysOnTop(true);
        setVisible(true);
    }

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2017
    Messages : 19
    Par défaut
    Merci pour les explications (claires).
    J'ai effectué les modifications comme précédemment indiqué : ma fenêtre affiche donc maintenant l'image sur Fenetre (dans le bon JFrame donc). Cependant les curseurs ont disparus. Faut il alors que je les ajoute comme composants de la Jframe Fenetre (avec quelle méthode?). Pourtant la méthode render (dans la main class "Jeux") faisait très bien son boulot avant ... j'aimerais comprendre ce qui a changé
    Merci d'avance pour vos réponses.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je n'ai pas regardé ton code d'avant. Pour ajouter des composants dans le panel, il faut lui donner un layout et et utiliser les methodes add() du panel. Comme n'importe quel composant swing en somme.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/10/2014, 12h56
  2. Photo en arrière plan dans une JFrame
    Par misswatson dans le forum NetBeans
    Réponses: 5
    Dernier message: 21/05/2011, 22h11
  3. Changer la couleur d'arrière plan d'une fenêtre MDI.
    Par tssi555 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 22/10/2008, 14h27
  4. Affichage d'un JLabel dans une popup (JFrame)
    Par mattyeux dans le forum Agents de placement/Fenêtres
    Réponses: 17
    Dernier message: 05/02/2007, 15h17

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