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

AWT/Swing Java Discussion :

[Debutant]Dessiner dans plusieurs JPanels. Probleme


Sujet :

AWT/Swing Java

  1. #1
    Membre actif Avatar de ahage4x4
    Inscrit en
    Janvier 2005
    Messages
    318
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 318
    Points : 238
    Points
    238
    Par défaut [Debutant]Dessiner dans plusieurs JPanels. Probleme
    Salut a tous,
    Je veux dessiner 2 JComponent, dans une Frame:

    Pour dessiner un seul component je le mets dans le contenPane de ma frame, pas de souci jusque la.
    Je fait sachant que jdgr est:
    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
    public class JGraduation extends JComponent  {
     
        public JGraduation(Simulateur sim)    {
     
        x=20;
        y=20;    
        ............
            }
     
           public void paintComponent(Graphics g) {
            System.out.println("Dessin  graduation en cours");
            Graphics2D g2 = (Graphics2D)g;      
            g2.setStroke (new BasicStroke(2));
            g.setColor(Color.black);
            g.fill3DRect(5,100,x,y,true);
     
        }
    Maintenant je veux rajouter un autre objet qui ressemble a jgdr, la le probleme est que le 2 eme objet s'affiche et le 1er ne s'affiche pas, il semble que le 2eme ecrase le 1er.

    Pour cela je prefere mette chacun de ces objets dans un panel a lui.
    La je n'ai plus rien des objets qui ne s'affiche, les panels s'affichent mais vide, aucun dessin provenant des mes JComponents s'affiche.

    J'ai l'impression que quelque chose m'echappe.

    Voila mon bout de 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
    f = new JFrame();
            JFrame.setDefaultLookAndFeelDecorated(true);
            contentPane = f.getContentPane();
            contentPane.setLayout(null);
        f.setSize(1070,710);
        f.setLocation(0,0);
        f.setTitle ("Prevision de la coupe");
     
     
     
     
        panel1 = new JPanel();
        panel1.setBorder(BorderFactory.createTitledBorder(" Parametrage des operations "));
        panel1.setLayout(null);
        panel1.setSize(800,600);
        panel1.setLocation(5,30);
        panel1.setVisible(true);
     
     
      /*C'est mon dessin que je veux afficher*/
        JGraduation jgdr = new JGraduation(sim);
        panel1.add(jgdr);
        contentPane.add(panel1);
        f.setVisible(true);
        f.validate();
    La methode paint de mon JGraduation ne semble pas s executer, elle s 'executait quand j'avai mis mon JGraduation dans mon contentPane (sans passer par panel1)

    Pourriez vous m'eclaircir?
    Merci d'avance

  2. #2
    Membre actif Avatar de ahage4x4
    Inscrit en
    Janvier 2005
    Messages
    318
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 318
    Points : 238
    Points
    238
    Par défaut
    Apparement je me suis mal expliqué.
    Ma question est basique, en gros j'ai du mal a afficher 2 Dessin JComponent.
    Quand j'insere un des composants dans mon JSimulateur extends JFrame pas de souci je fais le suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JGraduation jgdr = new JGraduation(sim);
    this.getContentPane().add(jgdr);
    et mon composant s'affiche.
    Maintenant je veux afficher le 2eme a la suite je fais ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    JGraduation jgdr = new JGraduation(sim);
    JPlanche jpl =new JPlanche(sim);
        jgdr.setLocation(100,100);
        this.getContentPane().add(jgdr);
        this.getContentPane().add(jpl);
    Il n'y a que le 2 eme qui s'affiche, le 1er ne se dessine pas du tout car j'ai fait un println dans la methode paintComponent du 1er, mais il y a rien du tout.

    Il doit y avoir quelquechose que je n'ai pas compris ?

    Merci bien

  3. #3
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Bonjour,

    selon le layout que tu utilises, il faut passer plusieurs paramètres à la méthode add(Component). Par défaut, le layout du contentPane d'une JFrame est le BorderLayout.

    Dans un BorderLayout, add(machin) est équivalent à add(machin, BorderLayout.CENTER). Mais le BorderLayout ne supporte qu'un seul composant à chaque emplacement (NORTH, SOUTH, CENTER, EAST et WEST). Donc quand tu ajoutes deux composants au même endroit, le premier est écrasé par le second.

    Si tu utilises un GridLayout, par exemple, il n'y a pas besoin de passer de paramètres supplémentaires.

  4. #4
    Membre actif Avatar de ahage4x4
    Inscrit en
    Janvier 2005
    Messages
    318
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 318
    Points : 238
    Points
    238
    Par défaut
    Xavlours, merci, je croyais que le layout par defaut etait null.
    Du coup je veux positionner moi meme mes composants qui sont pr rappel des dessins.

    On fait normalement ca non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    JPlanche jpl =new JPlanche(sim);
        JGraduation jgdr = new JGraduation(sim);
        jgdr.setLocation(100,100);
        jpl.setLocation(300,300);
        this.getContentPane().setLayout(null);
        this.getContentPane().add(jgdr);
        this.getContentPane().add(jpl);
        this.setVisible(true);
        this.validate();
    La j'ai que la fenetre qui s'affiche vide !! Qu'est ce qui cloche a ton avis?
    Merci bien pr ton aide
    Citation Envoyé par xavlours
    Bonjour,

    selon le layout que tu utilises, il faut passer plusieurs paramètres à la méthode add(Component). Par défaut, le layout du contentPane d'une JFrame est le BorderLayout.

    Dans un BorderLayout, add(machin) est équivalent à add(machin, BorderLayout.CENTER). Mais le BorderLayout ne supporte qu'un seul composant à chaque emplacement (NORTH, SOUTH, CENTER, EAST et WEST). Donc quand tu ajoutes deux composants au même endroit, le premier est écrasé par le second.

    Si tu utilises un GridLayout, par exemple, il n'y a pas besoin de passer de paramètres supplémentaires.

  5. #5
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Il se passe que le layout se charge d'affecter une taille et une position aux composants contenus dans le conteneur (méthodes setSize et setLocation, ou setBounds).

    Si il n'y a pas de Layout, tu dois le faire toi-même. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    jgdr.setBounds(0, 0, 200, 300);
    jpl.setBounds(200, 0, 200, 300);
    this.getContentPane().add(jgdr);
    this.getContentPane().add(jpl);

  6. #6
    Membre actif Avatar de ahage4x4
    Inscrit en
    Janvier 2005
    Messages
    318
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 318
    Points : 238
    Points
    238
    Par défaut
    Citation Envoyé par xavlours
    Il se passe que le layout se charge d'affecter une taille et une position aux composants contenus dans le conteneur (méthodes setSize et setLocation, ou setBounds).

    Si il n'y a pas de Layout, tu dois le faire toi-même. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    jgdr.setBounds(0, 0, 200, 300);
    jpl.setBounds(200, 0, 200, 300);
    this.getContentPane().add(jgdr);
    this.getContentPane().add(jpl);
    Merci bcp Xavlours, c'est deja une etape faite, maintenant je vais mettre mes objets dans des panels chacuns, si j'ai un souci je n'hesiterai pas.

    Merci encore

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

Discussions similaires

  1. Dessiner dans un JPanel
    Par mattyeux dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 20/12/2006, 13h16
  2. probleme pour dessiner dans un JPanel
    Par L4BiN dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 02/08/2006, 15h01
  3. Dessiner dans différents JPanels
    Par N@sH dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 20/05/2005, 15h39
  4. [debutant]dessins dans une fenetre
    Par drosophile dans le forum 2D
    Réponses: 4
    Dernier message: 04/11/2004, 14h55
  5. Dessiner dans un JPanel
    Par Oliveuh dans le forum Composants
    Réponses: 5
    Dernier message: 19/07/2004, 12h13

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