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 :

Autres questions de débutant : graphisme


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 85
    Par défaut Autres questions de débutant : graphisme
    Bonjour a tous et bonne année 2017, avec pleins de projets, informatiques ou autres...

    Je continue ma formation et j'ai pris comme exercice de faire l'histogramme qui est proposé sur ce site. Je n'ai pas envie de regarder le corrigé donc je vais poser mes questions ici.

    J'ai fait une classe Baton2D avec une méthode afficher(graphics g) et une classe RepereOrtho qui a aussi une méthode afficher(graphics g). L'argument est passé par la méthode paint de mon Jpanel.

    Voilà mon code qui devrait marcher et qui ne trace rien, j'ai donc des instructions qui ne font rien, pas d'erreur mais pas de trace, c'est usant, je ne sais pas dans quel sens chercher. Donc voilà
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    import java.awt.Color;
    import java.awt.Graphics;
    import java.util.ArrayList;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    
    public class Histogramme extends JPanel {
    
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        private static int LARGEUR = 600 ;
        private static int HAUTEUR = 400 ;
        ArrayList<Baton2D> mesbatons = new ArrayList<Baton2D>() ;
        
        Baton2D baton = new Baton2D(12,10,Color.RED) ;
        RepereOrtho repere = new RepereOrtho(5,HAUTEUR-5,LARGEUR,HAUTEUR);
        
        public void paint(Graphics g) {
            super.paint(g);
            repere.afficher(g);
        }
        //mesbatons.add(baton) ;  // Alors pourquoi j'ai pas le droit de le faire ?
        
        
        public static void main(String[] args) {
            JFrame mafenetre = new JFrame("Histogramme") ;
             
            JPanel panneau = new JPanel();        
            mafenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             
            
            
            panneau.setBackground(Color.WHITE) ; // Pourquoi le fond ne passe pas en blanc ?
            mafenetre.setLocation(200, 200);
            mafenetre.setSize(LARGEUR,HAUTEUR);
            Histogramme histo = new Histogramme() ;  // et pourquoi y a rien qui s'afficher
            
            mafenetre.setVisible(true);
        }
    }
    class RepereOrtho {
        private int Xorig,Yorig ;
        private int larg,haut ;
        RepereOrtho(int Xo,int Yo, int largeur,int hauteur){
            this.Xorig = Xo ;
            this.Yorig = Yo ;
            this.larg = largeur ;
            this.haut = hauteur ;
        }
        void afficher(Graphics g) {
            g.setColor(Color.BLACK);
            //g.drawLine(Xorig, Yorig, Xorig, larg);
            //g.drawLine(Xorig, Yorig, haut, Yorig);
            g.drawLine(10, 10, 100, 100) ;
            System.out.println("ici");
        }
    }
    class Baton2D {
        private int taille, largeur ;
        private Color couleur ;
        Baton2D (int taille, int largeur,Color couleur) {
            this.taille = taille ;
            this.largeur = largeur ;
            this.couleur = couleur ;
        }
        int getTaille() {
            return this.taille ;
        }
        int getlargeur() {
            return this.largeur ;
        }
        Color getcouleur() {
            return this.couleur ;
        }
        void afficher(Graphics g) {
            g.setColor(couleur);
            g.fillRect(0, 0, 10, 50) ;
        }
    }
    Merci d'avance !!!

  2. #2
    Membre habitué
    Homme Profil pro
    Autodidacte
    Inscrit en
    Décembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Décembre 2016
    Messages : 12
    Par défaut
    Pour le fond blanc c'est parce que tu n'as pas ajouter le panneau dont tu peins le fond en blanc a ta fenêtre via:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mafenetre.add(panneau);
    Pour le reste, n'ayant pas encore appris a me servie de grapichs g, je suis encore trop débutant pour te répondre.


    Par curiosité: Tu as finis ce tuto: http://java.developpez.com/livres-co...s/javaenfants/ ?

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    1. Citation Envoyé par SeniorEric Voir le message
      //mesbatons.add(baton) ; Alors pourquoi j'ai pas le droit de le faire ?
      Parce qu'on ne peut mettre de telles instructions que dans le corps d'une méthode. Dans le corps d'une classe, ne ne peut mettre que des déclarations (de variables, de méthodes, de classes). Les déclarations de variables peuvent être accompagnées d'une initialisation, mais aucune initialisation, ni aucune instruction void (ne retournant pas de valeur) à fortiori ne peut être mise toute seule.
      Pour résoudre ton problème, tu peux par exemple :
      1. initialiser ta liste de batons dans le constructeur :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        public Histogramme() {
           batons.add( new Baton2D(12,10,Color.RED) );
        }
      2. passer par l'initialisation :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ArrayList<Baton2D> mesbatons = Arrays.asList( new Baton2D(12,10,Color.RED) ) ;
      3. Faire une méthode :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        public void addBaton(int taille, int largeur,Color couleur) {
           addBaton(new Baton2D(taille, largeur, couleur);
        }
        public void addBaton(Baton2D baton) {
           mesBatons.add(baton);
        }
        Dans la cadre d'un histogramme, on veut pouvoir afficher plusieurs valeurs en batons, cohérente : il faudra donc plutôt faire une méthode du genre setSerie(Valeurs valeurs), qui permet de passer plusieurs valeurs/couleurs, et que cette méthode vide la liste de batons puis y ajoute les nouveaux batons à partir de ces valeurs.
    2. Citation Envoyé par SeniorEric Voir le message
      panneau.setBackground(Color.WHITE) ; Pourquoi le fond ne passe pas en blanc ?
      Parce que le panneau panneau n'est pas affiché : il ne suffit pas de créer un JPanel pour qu'il s'affiche, il faut le mettre dans une fenêtre visible. Mais procéder comme ça pour mettre ton fond en blanc va te compliquer la vie, parce que ce que tu veux afficher c'est un histogramme sur fond blanc, donc en créant un panneau blanc, et un histogramme à côté, il va falloir que tu ajoutes 2 panneaux à la fenêtre, et faire qu'ils soient superposés, que le fond de l'histogramme soit transparent, et qu'il soit au-dessus du panneau. On pourrait utilser un OverlayLayout et faire setOpaque(false) sur Histogramme, mais il est bien plus simple d'affecter le blanc au fond de l'instance d'Histogramme.

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
       
      // inutile
      //JPanel panneau = new JPanel(); 
      //panneau.setBackground(Color.WHITE) ; // Pourquoi le fond ne passe pas en blanc ?
              Histogramme histo = new Histogramme() ;  
              histo.setBackground(Color.WHITE)
    3. Citation Envoyé par SeniorEric Voir le message
      Histogramme histo = new Histogramme() ;
      et pourquoi y a rien qui s'afficher
      Comme je le disais précédemment, il faut mettre les composants à afficher dans une fenêtre. Leur position et leur taille sont gérées par un gestionnaire d'agencement (Layout Manager) : on peut s'en passer et gérer les positions et tailels à la main, mais il est préférable de ne pas le faire. Une fenêtre de type JFrame est composée de plusieurs couches dont une est prévue pour le contenu : le content pane. Le Layout Manager du content pane est par défaut un BorderLayout. Pour mettre du contenu dans une fenêtre, on peut donc remplacer le content pane par son propre panel, ou alors mettre les composants dans le content pane existant, layouté par un BorderLayout donc (méthode que je préfère personnellement). Pour ajouter un composant dans le content pane, on peut soit faire :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      frame.getContentPane().add( composant, contrainte );
      soit utiliser le raccourci
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      frame.add( composant, contrainte );
      qui fait la même chose
      contraint étant une valeur qui dépend du Layout Manager.
      Pour mettre l'histogramme dans la zone principale, soit au centre du BorderLayout on fera,
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      mafenetre.add( histo, BorderLayout.CENTER );
      Comme il existe une contrainte par défaut dans le BorderLayout et que cette contrainte est justement BorderLayout.CENTER, on peut écrire plus simplement :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      mafenetre.add( histo );
    4. parce que Swing préfère ne pas traiter le layout automatiquement lorsqu'on ajoute un composant (parce qu'on pourrait en ajouter plusieurs et que le layout peut être couteux en temps, il vaut mieux faire ces ajouts avant de rendre visible la fenêtre, sinon on est obligé de dire à la fenêtre qu'on a changé son contenu pour que le composant affiché soit visible correctement (ce qu'on fera par appel de revalidate() et éventuellement repaint().
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 85
    Par défaut
    Le 1 OK j'ai compris 5/5.
    Le 2 et 3 : je crois que je ne comprends pas bien ce qu'est un JPanel par rapport à une Jframe et par rapport à un composant type bouton.

    La JFrame c'est la fenetre, mais est ce obligatoire pour tracer des formes ? Dans cet exemple, il n"ouvre pas de JFrame : http://duj.developpez.com/tutoriels/java/dessin/intro/
    et pour mettre des boutons par exemple, il faut un JFrame, un JPanel et ajouter les boutons au Jpanel.

    Ce que j'ai du mal à trouver c'est le référence manual. On trouve plein d'exemples qui tracent des formes, mais les approches sont souvent différentes.

    Pour l'instant j'ai tracé les axes, mais j'ai perdu le fond blanc dés que j'ai rajouté histo au borderlayout de mafenetre.

    Et puis encore merci pour ton aide

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Tu as 2 types de composants :
    1. des composants. Par exemple JButton, JList, JCheckBox...
    2. des conteneurs. Les conteneurs sont des composants qui peuvent contenir des composants (donc des JButton, JList, JCheckbox, mais aussi des conteneurs). Par exemple JPanel,

    Pour pouvoir être affichés, les composants doivent être mis dans des fenêtres, des ensembles complexes de conteneurs, qui sont associé à une fenêtre système. Par exemple, JFrame, JInternalFrame...
    En général, dans le système, une fenêtre est un sous-espace de l'écran avec des trucs dedans. Pour pouvoir faire facilement beaucoup de choses, la fenêtre Swing est composée de différentes couche. Une pour le fond par exeple, avec le titre, les boutons de fermeture, de menu de fenêtre, l'icône, etc. (Voir la structure de couches ici). Une couche est prévue pour le contenu : les champs de ton formulaire, les boutons tout ça. Cette couche est constitué de ce qu'on appel le "content pane" (le panneau de contenu) : c'est lui qui va contenir ce qui est à l'intérieur de la zone de la fenêtre qui est comprise en dessous du titre et entre les bordures. En bref, la partie spécifique de ton dialogue. Le content pane est une sorte de JPanel préparamétré. Donc tu peux le considérer comme un JPanel : soit tu le remplaces par le tiens, soit tu y mets le composants que tu veux (personnellement je préfère cette second option, pour ne pas dénaturer le content pane par défaut). La barre de menu va être dans un layered pane, pour ne pas interférer avec le contenu, ou les bordures. On affichera les fenêtres de type popup dans un layered pane pour ne pas interférer avec le reste des composants de la fenêtre, etc.
    Le "content pane" c'est un moyen de distinguer la partie dite de décoration de la fenêtre (titre, boutons de fermeture, bordures...), d'autres éléments (les popups, ce qui sert au drag and drop, etc.) et la partie utile (son contenu). Par exemple, on peut faire des fenêtres qui contiennent des fenêtres en remplaçant le content pane par défaut par un JDesktopPane, un "content pane" plus complexe qu'un JPanel qui va pouvoir contenir des JInternalFrame, des conteneurs qui ressemblent à des JFrame, ce qui permet d'avoir des fenêtres dans des fenêtres.

    Pour commencer simplement, toi, tu n'as qu'à te préoccuper du contenu : donc ajouter des composants dans le content pane. Pour te simplifier encore plus, considère que tu fais ton interface dans un JPanel (un conteneur donc) et ajoute simplement ce panel dans le content pane :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    JFrame frame = new JFrame("Une fenêtre");
     
    frame.add( createContent() );
     
    frame.setVisible(true);
    et
    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
    JPanel createContent() {
     
        JPanel panel = new JPanel();
     
        // tu affectes un layout manager en fonction de tes besoins
        panel.setLayout(new BorderLayout());
     
        // ici tu ajoutes tes composants
     
        // par exemple, en bas, un panel avec des boutons
        JPanel buttonPanel = new JPanel(); // un panneau pour contenir des boutons
        JButton boutonSave = new JButton("Save");
        buttonPanel.add( boutonSave ); // on ajoute le bouton save
        JButton boutonQuit = new JButton("Quit");
        buttonPanel.add( boutonQuit ); // on ajoute le bouton quit
        panel.add(buttonPanel, BorderLayout.SOUTH); // on met le panel de boutons en bas de la fenêtre
     
        // une liste scrollable
        String[] values = Stream.iterate(1, v->++v).limit(100).map(v->"Valeur "+v).toArray(String[]::new); // Valeur 1, Valeur 2...Valeur 100
        JList<String> jlist = new JList<>(values);
        panel.add(new JScrollPane( jlist ), BorderLayout.CENTER); // on met la liste dans un JScrollPane dans le centre de la fenêtre
     
        return panel;
     
     
    }

    Ce qui donne :
    Nom : Capture.PNG
Affichages : 195
Taille : 4,6 Ko

    Snippet complet :
    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
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.util.stream.Stream;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
     
    public class ExempleFenetre {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Exemple");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		frame.add( createContent() );
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	public static JComponent createContent() {
    		JPanel panel = new JPanel();
     
    	    // tu affectes un layout manager en fonction de tes besoins
    	    panel.setLayout(new BorderLayout());
     
    	    // ici tu ajoutes tes composants
     
    	    // par exemple, en bas, un panel avec des boutons
    	    JPanel buttonPanel = new JPanel(); // un panneau pour contenir des boutons
    	    JButton boutonSave = new JButton("Save");
    	    buttonPanel.add( boutonSave ); // on ajoute le bouton save
    	    JButton boutonQuit = new JButton("Quit");
    	    buttonPanel.add( boutonQuit ); // on ajoute le bouton quit
    	    panel.add(buttonPanel, BorderLayout.SOUTH); // on met le panel de boutons en bas de la fenêtre
     
    	    // une liste scrollable
    	    String[] values = Stream.iterate(1, v->++v).limit(100).map(v->"Valeur "+v).toArray(String[]::new); // Valeur 1, Valeur 2...Valeur 100
    	    JList<String> jlist = new JList<>(values);
    	    panel.add(new JScrollPane( jlist ), BorderLayout.CENTER); // on met la liste dans un JScrollPane dans le centre de la fenêtre
     
    	    return panel;
    	}	
    }


    Citation Envoyé par SeniorEric Voir le message
    Dans cet exemple, il n"ouvre pas de JFrame : http://duj.developpez.com/tutoriels/java/dessin/intro/
    et pour mettre des boutons par exemple, il faut un JFrame, un JPanel et ajouter les boutons au Jpanel.
    Dans ce tutoriel, on explique comment dessiner en Java 2D (introduction pour débutant) : on se concentre donc sur l'aspect dessin, en utilisant un composant dédié JCanvas, étendant JPanel. Mais pour l'afficher, l'exemple utilise bien une JFrame :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static void showOnFrame(JComponent component, String frameName) {
    		JFrame frame = new JFrame(frameName);
    		WindowAdapter wa = new WindowAdapter() {
    			public void windowClosing(WindowEvent e) {
    				System.exit(0);
    			}
    		};
    		frame.addWindowListener(wa);
    		frame.getContentPane().add(component);
    		frame.pack();
    		frame.setVisible(true);
    	}
    Ceci est un code générique qui permet d'affichage n'importe quel composant Swing (étendant JComponent) dans une JFrame. On pourrait utiliser ce code pour afficher mon exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GUIHelper.showOnFrame(ExempleFenetre.createContent(), "Démo");
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 85
    Par défaut
    Bon, je comprends un peu mieux. Mais là, mon problème n'est plus graphique, mon ArrayList<Baton2D> ne se remplit pas, alors que j'ai fait des add dans le constructeur de histogramme, je ne comprends pas...

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.util.ArrayList;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    
    public class Histogramme extends JPanel {
    
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	private static int LARGEUR = 600 ;
    	private static int HAUTEUR = 400 ;
    	public ArrayList<Baton2D> mesbatons = new ArrayList<Baton2D>() ;
    	
        RepereOrtho repere = new RepereOrtho(5,HAUTEUR-45,LARGEUR,HAUTEUR);
    	
        public void paint(Graphics g) {
        	super.paint(g);
    		repere.afficher(g);
    		System.out.println("Dans paint "+mesbatons.size());  // là il indique 0, le tableau est vide ... du coup il n'affiche rien
    		for (Baton2D baton : mesbatons) {
    			System.out.println("dans paint pour chaque baton "+baton.getTaille()+" "+baton.getLargeur()+" "+baton.getCouleur());
    			baton.afficher(g) ;
    		}
    	}
    	
        public void histogramme() {
        	Baton2D baton1 = new Baton2D(12,10,Color.RED) ;
        	mesbatons.add(baton1) ;
        	Baton2D baton2 = new Baton2D(10,10,Color.GREEN) ;
        	mesbatons.add(baton2) ;
        	Baton2D baton3 = new Baton2D(17,10,Color.BLUE) ;
        	mesbatons.add(baton3) ;
        	Baton2D baton4 = new Baton2D(5,10,Color.YELLOW) ;
        	mesbatons.add(baton4) ;
        	Baton2D baton5 = new Baton2D(13,10,Color.MAGENTA) ;
        	mesbatons.add(baton5) ;
        	Baton2D baton6 = new Baton2D(13,10,Color.CYAN) ;
        	mesbatons.add(baton6) ;
        	System.out.println("Dans histogramme "+mesbatons.size());
        }
    	public static void main(String[] args) {
    		JFrame mafenetre = new JFrame("Histogramme") ;
    		 
    		JPanel panneau = new JPanel();		
    		mafenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		mafenetre.add(panneau) ;
    		mafenetre.setLocation(200, 200);
    		mafenetre.setSize(LARGEUR,HAUTEUR);
    		Histogramme histo = new Histogramme() ;
    		mafenetre.setBackground(Color.WHITE) ;
    		//panneau.setBackground(Color.WHITE) ;
    		mafenetre.add( histo, BorderLayout.CENTER );
    		panneau.setBackground(Color.WHITE) ;
    		mafenetre.setResizable(false);
    		mafenetre.setVisible(true);
    		
    		
    	}
    }
    class RepereOrtho {
    	private int Xorig,Yorig ;
    	private int larg,haut ;
    	RepereOrtho(int Xo,int Yo, int largeur,int hauteur){
    		this.Xorig = Xo ;
    		this.Yorig = Yo ;
    		this.larg = largeur ;
    		this.haut = hauteur ;
    	}
    	void afficher(Graphics g) {
    		g.setColor(Color.BLACK);
    		g.drawLine(Xorig, Yorig, Xorig, 5);
    		g.drawLine(Xorig, Yorig, larg-10, Yorig);
    		System.out.println("dans afficher de repere "+Xorig+" "+Yorig+" "+larg+" "+haut);
    		//g.drawLine(10, 10, 100, 100) ;
    		//System.out.println("ici");
    	}
    }
    class Baton2D {
    	private int taille, largeur ;
    	private Color couleur ;
    	Baton2D (int taille, int largeur,Color couleur) {
    		this.taille = taille ;
    		this.largeur = largeur ;
    		this.couleur = couleur ;
    	}
    	int getTaille() {
    		return this.taille ;
    	}
    	int getLargeur() {
    		return this.largeur ;
    	}
    	Color getCouleur() {
    		return this.couleur ;
    	}
    	void afficher(Graphics g) {
    		g.setColor(couleur);
    		System.out.println("dans afficher de baton "+taille+" "+largeur+" "+couleur);
    		g.fillRect(0, 0, 10, 50) ;
    	}
    }

    on dirait qu'il ne passe pas dans le constructeur ...!!

  7. #7
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 85
    Par défaut
    Citation Envoyé par Seloa Voir le message
    Pour le fond blanc c'est parce que tu n'as pas ajouter le panneau dont tu peins le fond en blanc a ta fenêtre via:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mafenetre.add(panneau);
    Pour le reste, n'ayant pas encore appris a me servie de grapichs g, je suis encore trop débutant pour te répondre.


    Par curiosité: Tu as finis ce tuto: http://java.developpez.com/livres-co...s/javaenfants/ ?
    Merci et pas mal pour un débutant. Pour le tuto, non je ne l'avais pas lu mais je vais le faire....:-)

Discussions similaires

  1. [Python 3.X] Question de débutant : Problème de classes dans un autre fichier
    Par amelyfred dans le forum Général Python
    Réponses: 4
    Dernier message: 17/06/2015, 12h00
  2. Réponses: 3
    Dernier message: 10/04/2014, 17h12
  3. freeze de la GUI et autres questions débutantes
    Par chaima01 dans le forum Débuter
    Réponses: 1
    Dernier message: 30/04/2013, 19h54
  4. [Débutant] Autre question sur Const
    Par Faiche dans le forum Débuter
    Réponses: 9
    Dernier message: 21/10/2008, 14h08
  5. [HyperFile] 2 questions de débutant
    Par khan dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 29/04/2002, 23h18

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