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

avec Java Discussion :

Je débute en JAVA et je bloque je ne comprend pas mon erreur :(


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2018
    Messages : 22
    Points : 7
    Points
    7
    Par défaut Je débute en JAVA et je bloque je ne comprend pas mon erreur :(
    Bonjour,

    Je débute en JAVA et je bloque.

    Pour le moment j'essai de faire une interface. Je pense que mon code sera plus parlant que des explication.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Main{
     
    	public static void main(String[] args) {
    Fenetre general=new 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
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
     
    public class Fenetre extends JFrame{
    	JMenuBar barDeMenu= new JMenuBar();
    	JMenu eleve = new JMenu("eleve");
    	JMenu m3eme = new JMenu("3 ème");
    	JMenu m4eme = new JMenu("4 ème");
    	PanelEleve panelEleve= new PanelEleve();
     
    	 Fenetre() {
    		PanelEleve panelEleve= new PanelEleve();
    		this.setTitle("Bultin 3 et 4 ème.");
    		this.setSize(400,500);
    		this.setLocationRelativeTo(null);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.barDeMenu.add(eleve);
    		this.barDeMenu.add(m3eme);
    		this.barDeMenu.add(m4eme);
    		this.setJMenuBar(barDeMenu);
    		this.setContentPane(panelEleve);
    		this.setVisible(true);
    	}
     
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import javax.swing.JPanel;
    import java.awt.Color; 
    import javax.swing.JFrame;
     
    public class PanelEleve extends JFrame {
     
    	 PanelEleve() {
    		JPanel panEleve= new JPanel();
    		panEleve.setBackground(Color.green);
    	}
     
     
    }
    Mais ca ne fonctionne pas j'essai de comprendre pour quoi est ce quelqu'un pourrait m'expliquer ?

    Merci d'avance

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    Bonjour à vous,

    Lorsque j'exécute votre code, j'obtiens l'erreur suivante :
    Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container
    at java.awt.Container.checkNotAWindow(Container.java:490)
    at java.awt.Container.addImpl(Container.java:1091)
    at javax.swing.JLayeredPane.addImpl(JLayeredPane.java:231)
    at java.awt.Container.add(Container.java:973)
    at javax.swing.JRootPane.setContentPane(JRootPane.java:626)
    at javax.swing.JFrame.setContentPane(JFrame.java:698)
    at Fenetre.<init>(Fenetre.java:20)
    at Main.main(Main.java:4)
    La ligne de code provoquant cette erreur est donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class Fenetre extends JFrame{
     
        // ...
     
        this.setContentPane(panelEleve); // <--- ICI
     
        // ...
    }
    La documentation de cette méthode signale ceci :

    Sets the contentPane property. This method is called by the constructor.
    Swing's painting architecture requires an opaque JComponent in the containment hierarchy. This is typically provided by the content pane. If you replace the content pane it is recommended you replace it with an opaque JComponent.
    Donc, pour corriger cette erreur, il faut que la classe PanelEleve étende JComponent au lieu de JFrame.

    Ce qui donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class PanelEleve extends JComponent {
        // Le code de la classe
    }
    Si ce n'est déjà fait, je vous conseille de consulter le tutoriel Création interface graphique avec Swing

    Bien à vous

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2018
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Bonjour merci pour ta réponse.

    Mais il reste un petit probleme quand je remplace extends JFrame par extends JComponent

    j'obtiens cette erreure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    	The method setContentPane(Container) in the type JFrame is not applicable for the arguments (PanelEleve)
     
    	at Fenetre.<init>(Fenetre.java:23)
    	at Main.main(Main.java:5)
    La encore c'est toujours la meme ligne qui pose probleme cette fois si je comprend bien c'est qu'il n’accepte que des type JFrame?

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    Voici le code que j'utile pour tester votre application

    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
    import javax.swing.*;
     
    public class Fenetre extends JFrame{
        JMenuBar barDeMenu= new JMenuBar();
        JMenu eleve = new JMenu("eleve");
        JMenu m3eme = new JMenu("3 ème");
        JMenu m4eme = new JMenu("4 ème");
        PanelEleve panelEleve= new PanelEleve();
     
        Fenetre() {
    //        PanelEleve panelEleve= new PanelEleve();
            this.setTitle("Bultin 3 et 4 ème.");
            this.setSize(400,500);
            this.setLocationRelativeTo(null);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.barDeMenu.add(eleve);
            this.barDeMenu.add(m3eme);
            this.barDeMenu.add(m4eme);
            this.setJMenuBar(barDeMenu);
            this.setContentPane(panelEleve);
            this.setVisible(true);
        }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Main {
     
        public static void main(String[] args) {
            Fenetre general=new Fenetre();
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import javax.swing.*;
    import java.awt.*;
     
    public class PanelEleve extends JComponent {
     
        PanelEleve() {
            JPanel panEleve = new JPanel();
            panEleve.setBackground(Color.green);
        }
     
     
    }
    Chez moi, ce code fonctionne. Pourriez-vous regarder la différence entre le votre et celui-ci ?

    Si vous ne trouvez pas, n'hésitez-pas à poster ici votre code afin que je puisse tenter de trouver l'erreur plus facilement.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2018
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup ca fonctionne maintenant j'ai oublier d'importer la class awt.*
    par contre ca m'ouvre bien une fenetre mais dans mon code j'ai demander a ce que mon panel soit de couleur verte pour justement le voir mais je n'ai aucune couleur je ne comprend pas le JPanel ne devrais pas etre affiché? Meme en faisant un .setVisible(true) ca ne fct pas :s

  6. #6
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    Avec un peu de retard,

    Dans le code de votre classe PanelEleve:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import javax.swing.*;
    import java.awt.*;
     
    public class PanelEleve extends JComponent {
     
        PanelEleve() {
            JPanel panEleve = new JPanel();
            panEleve.setBackground(Color.green);
        }
     
     
    }
    Vous pouvez voir que vous ne changez pas la couleur du PanelEleve, mais la couleur du panel créé dans la variable panEleve.

    Hors, le panel créé dans cette variable n'est pas lié à un élément graphique.

    Dans votre cas, votre classe représente déjà un Panel (ou du moins vous souhaitez probablement que la classe PanelEleve représente un panel) il n'est donc pas nécessaire de créer un nouveau Panel dans le constructeur.

    Le mieux pour résoudre votre cas est que votre classe PanelEleve étende un JPanel et pas un JComponent et dans le constructeur, vous pouvez directement appeler la méthode setBackground(Color.green) sur votre instance (this).

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2018
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup pour votre aide je comprend mieux tout cela

    Je peux passé a la phase 2 de mon apprentissage (même si je bute déjà sur les action lié au bouton de menu) mais je persévère

Discussions similaires

  1. [MySQL-5.5] Requête bloquée, je ne comprends pas :(
    Par MrKementari dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/01/2016, 12h07
  2. Réponses: 16
    Dernier message: 04/12/2015, 16h50
  3. Soket java, je ne comprend pas les erreurs
    Par john_star dans le forum NetBeans
    Réponses: 1
    Dernier message: 04/04/2011, 09h26
  4. Réponses: 6
    Dernier message: 04/12/2008, 09h03
  5. [JAVA][SERVLET][TOMCAT][COOKIE] addCookie(cookie) marche pas
    Par nickylarson34 dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 08/08/2005, 17h58

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