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 :

recuperer un JPanel et ses dessins


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut recuperer un JPanel et ses dessins
    bonjour,

    J'ai besoin d'une methode qui recupere tous les dessins d'un JPanel et qui l'associe a un JPanel. Autrement dit, jaimerais definir un JPanel qui récupere tous les dessins que j'ai fait sur un autre JPanel.

    Une telle methode existe t'elle ?

    Si vous n'avez pas compris voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(e.getSource() == AffEnt){
     
                    try {
     
                        CollectionEntite C = new CollectionEntite(this,FS2);
                    } catch (SQLException ex) {
                        ex.printStackTrace();
                    }
     
            }
    FS2 étant mon JPanel et this un objet de type "agl"...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      JPanel Draw;    
       Agl a;
        /** Creates a new instance of CollectionEntite */
        public CollectionEntite(Agl a,JPanel p) throws SQLException {
          //construction de la fenetre
                this.a=a;
                Draw=p;
            .........................
    j'associe mes parametres ..

    et lorsque je clique sur ok :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if(e.getSource() == ok)
            {
               String nom=c.getSelectedItem();
               int i= findIndexEnt(nom);      
               Entite E=List[i];
               System.out.println(E);
               E.setDraw(Draw);
               E.setAgl(a);
               E.paint();
     
               this.dispose();
            }
    List étant un tableau d'entité

    Dans entite.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        void setAgl(Agl a) {
            this.a=a;
        }
    et je dessine :
    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
     
        public void paint(){        
     
                     Graphics g=null;	
                    g=Draw.getGraphics();
     
     
                    g.setColor(Color.WHITE);
                    g.fillRect(positionX+1,positionY+1,largeur-1,hauteur-1);
                    g.setColor(Color.BLACK);
                    g.drawRect(positionX,positionY,largeur,hauteur);
     
          // BLA BLA BLA BLA BLA BLA 
     
                   a.setPanel(Draw.getGraphics());
        }
    le composant se dessine bien mais s'efface lorsque je reduit la fenetre ou la redimmessione donc j'ai fait appel a setPanel qui je pensait devait recuperé tous les dessin et les appliquer ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        void setPanel(Graphics graphics) {
            FS2.update(graphics);
        }

    mais le hic c'est que ca ne marche pas : pourtant j'ai bien redefinie la methode paint de mon JPanel en le passant en parametre
    comment je fais pour que quand je redessinne la surface de FS2 il ne perde pas les modifications ?

    merci

  2. #2
    Membre éclairé Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    persone ne sait ?

    est ce ke je peux definir mon dessin comme composant dun JPanel et donc l'ajouter comme je veux ?

  3. #3
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Je dois avouer que je n'ai aps trouvé ta question très claire...

    Quand tu parles de dessin, il s'agit de composants ou vraiments de dessins fait dans le paint de ton JPanel avec des instructions du genre graphics.drawLine(...) ?

  4. #4
    Membre éclairé Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    et je dessine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      public void paint(){ 
      Graphics g=null; 
      g=Draw.getGraphics(); 
      g.setColor(Color.WHITE); 
      g.fillRect(positionX+1,positionY+1,largeur-1,hauteur-1); 
      g.setColor(Color.BLACK); 
      g.drawRect(positionX,positionY,largeur,hauteur); // BLA BLA BLA BLA BLA BLA 
      a.setPanel(Draw.getGraphics()); }
    Je dessine avec g.drawBidule() ....
    et le probleme c'est que le dessin s'efface quand je redimmenssionne la fenetre ou la reduit totalement
    normal puisque qu'il fait appel a une methode actualiserMCD() qui construit un FS2 ( mon JPanel ) vierge de tout dessin ... Comment conserver mon dessin ???

  5. #5
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Non, ça ne répond pas entièrement à ma question.

    Le problème c'est que l'on ne voit pas où se situe les bouts de code que tu nous a donné.
    Ma question, c'est : les dessins sont directement fais dans le JPanel ou alors ils sont fait dans des composants que tu as ajouté au JPanel?

  6. #6
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Essaie d'épurer le code pour isoler le plus possible le problème.
    Ainsi, y'aura moins de trucs en vrac, et ça nous sera plus facile à lire.

    Avec un peu de chance, c'est même possible que tu trouves le pb toi-même en faisant le ménage.

  7. #7
    Membre éclairé Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    alors en fait voila ce ke je fait :

    j'ai ma classe principale avec mon JPanel qui sapelle FS2
    lorsque je clique sur mon bouton "affent" je crée une collectionEntite ( une frame ). le constructeur prends en parametre deux choses : l'objet qui est du type "agl" ( ma classe principale ) et mon JPanel FS2 dans lequel je veux dessiner.

    donc j'ai a lecran ma frame qui est du type collection entite lorsque je clique sur le bouton ok voila ce ki se passe :

    E etant un objet de type entite ( une autre classe donc ...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(e.getSource() == ok)
            {
               E.setDraw(Draw);// je lui apsse le panel 
               E.setAgl(a);// je lui passe l'agl
               E.paint();//je dessine mon entite 
     
               this.dispose();
            }
    je (re)precise que je dessine grace a ceci :
    cette methode se trouve dans entite.java
    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
     
     
     
     public void paint(){        
     
                     Graphics g=null;	
                    g=Draw.getGraphics();
     
     
                    g.setColor(Color.WHITE);
                    g.fillRect(positionX+1,positionY+1,largeur-1,hauteur-1);
                    g.setColor(Color.BLACK);
                    g.drawRect(positionX,positionY,largeur,hauteur);
     
          // BLA BLA BLA BLA BLA BLA 
     
                   a.setPanel(Draw.getGraphics());
        }

    j'aimerai donc que mon dessin reste sur le JPanel et ne s'efface pas kan je redimensionne la fenetre principale...
    je pesne a plusieurs solutions :
    - definir mon dessin comme un composant nouveau ( possible ? comment on fait ca ? )
    - definir le panel et son dessin comme nouveau FS2 pour ne aps perdre les changements .


    Jpeux pas faire plus simple la lol

  8. #8
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Bon, je cerne un peu plus le pb (enfin, je pense) mais ça reste pas très clair. Mais je dois fatiguer

    Ceci dit, j'ai qd même une petite idée.
    A chaque fois que tu redimensionnes une fenêtre, tous les composants se redessinent. Chaque composant ignore totalement la tête qu'il avait avant le redimensionnement.
    C'est donc normal que ton dessin disparaisse.

    Pour que le dessin reste, tu dois surchager la méthode paintComponent.
    Ceci dit, comme ton dessin doit pouvoir être dynamique, je pense que le mieux et de surcharger la méthode d'un JPanel (ou JLabel) que tu ajoutes à ton JPanel qui existe déjà.
    Sinon, tu vire ton JPanel et tu le remplace par un autre. Je ne pense pas qu'il soit possible de modifier une méthode dynamiquement.

    En gros, quand tu voudras dessiner, il faudra suivre le schema suivant (par exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    JPanel dessin = new JPanel() {
      protected void paintComponent(Graphics g) {
        super(g);
        réalisation du dessin
      }
    };
    p.add(dessin);  // ajout du dessin dans le JPanel
    ça répond à ta question?

  9. #9
    Membre éclairé Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    je ne comprends pas : tu ajoute un panel a un panel ? ce n'est pas possible ...

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 899
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par keub51
    bonjour,

    J'ai besoin d'une methode qui recupere tous les dessins d'un JPanel et qui l'associe a un JPanel. Autrement dit, jaimerais definir un JPanel qui récupere tous les dessins que j'ai fait sur un autre JPanel.
    Trois methodes :
    - inclure le panel source (ou une copie/clone) dans le panel destination. Il suffit juste d'utiliser les methodes Swing de contruction de GUI habituelles.
    Sans copie evidement ca retire la source de l'endoit ou il se trouvait. Avec copie, evidement la copie ne contiendra pas les modification ulterieures a moins de mettre en place un systeme de partage des variables (ca depend comment tu clones, par defaut il n'y a a pas de clonage en profondeur ce qui nous arrange) ou en utilisant des mecanismes du genre observateur/listener pour notifier des mises-a-jour.

    - creer une BufferedImage a la taille du panel source et rendre le panel source dedans. Afficher cette image dans le panel destination, au besoin utiliser des transformations pour l'aggrandir/retrecir pour que le tout s'affiche correctement dans le panel destination.

    - appeler la methode de rendu du panel source depuis celle du panel destination. Si le panel source n'est pas deja affiche a l'ecran, il faudra lui donner une taille avant d'appeler la methode de rendu. Au besoin effecter des transformations affines pour que le tout s'affiche correctement dans le panel destination.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  11. #11
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Citation Envoyé par keub51
    je ne comprends pas : tu ajoute un panel a un panel ? ce n'est pas possible ...
    Si, tu peux imbriquer autant de JPanel (ou autre JComponent) que tu veux, c'est le principe de base pour la création d'interface en Java (et peut-être d'autres langages...)

  12. #12
    Membre éclairé Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    Citation Envoyé par Deaf
    Si, tu peux imbriquer autant de JPanel (ou autre JComponent) que tu veux, c'est le principe de base pour la création d'interface en Java (et peut-être d'autres langages...)

    jcrois j'avais aps assez dormi quand j'ai sorti ça lol ...

    merci de vos reponses en tout cas je vais explorer dans cette direction

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

Discussions similaires

  1. JPanel et ses évènements
    Par bastien dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 28/04/2010, 11h02
  2. 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
  3. [Dessin JPanel] Generer dessin pas a pas
    Par -=Spoon=- dans le forum 2D
    Réponses: 2
    Dernier message: 03/12/2004, 22h41
  4. Dessiner dans un JPanel
    Par Oliveuh dans le forum Composants
    Réponses: 5
    Dernier message: 19/07/2004, 12h13
  5. dessiner le contour d'un jpanel
    Par iamspacy dans le forum Composants
    Réponses: 4
    Dernier message: 11/05/2004, 15h11

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