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

2D Java Discussion :

Passer des paramètres à une autre class qui me trace un cercle


Sujet :

2D Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 9
    Points
    9
    Par défaut Passer des paramètres à une autre class qui me trace un cercle
    Bonjour,

    Mon problème peut paraître simple pour les experts dans la matière mais cela fait un mois pratiquement que je carre la dessus :

    Voilà mon souci :

    - J'ai une classe Fenetre_Principale
    - Une classe Trace_Cercle.

    Dans Fenetre_Principale, il y a trois JTextField dans les quels on doit rentrer les coordonnées x, y et Rayon.

    Ces paramètres doivent ensuite être saisis par Trace_Cercle, qui doit me tracer un cercle dans une JPanel de Fenetre_Principale.

    Très honnêtement j'ai effectué plusieurs tentative sans succès. Si vous pouvez m'apporter votre aide, je vous en serais reconnaissant.

    Débutantivement

    Thomas R.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Par exemple, Trace_Cercle pourrait avoir une méthode avec les paramètres x, y et rayon, ainsi que le Graphics du JPanel sur lequel dessiner.
    Ou alors Trace_Cercle pourrait avoir 3 accesseurs pour x, y, et le rayon, et une méthode "compute" avec un Graphics en paramètre pour tracer le cercle.
    Ou alors.... Il y a pleins de moyens différents mais qui reviennent au même au final : il faut transmettre des informations à une instance de Trace_Cercle.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Bonjour et merci Dinobogan,

    Je vois ce que tu veux dire, mais le hic est comment réellement faire, je m'explique :

    Dans la première classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class Fenetre_principale{
             public methode_trace_cercle(int X, int Y, int Rayon, JPanel Trace_ici){
                                    // Que dois-je faire ici SVP ?
                                   }
    //Quand je clique sur ce bouton je saisis les valeurs de x,y et rayon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
             bouton_trace.addActionListener(new ActionListener() {
                                   @Override
                                   public void actionPerformed(ActionEvent e) {
                                   //Puis je appeler ma méthode de cette manière ?
                                   // methode_trace_cercle(XX, YY, RRayon, JPanel_schemas)
                                   }
    }
    Enfin dans ma seconde classe qui trace le cercle dans le JPanel de la 1ere classe :

    comment faire pour récupérer les valeurs saisies dans Fenetre_principale et tracer un cercle avec ?

    La méthode pour trace le cercle je sais m'en servir au moins lol ...

    Merci de votre aide.

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Tes deux messages semblent contradictoires sur "l'architecture" de tes deux classes.
    Je résume brièvement ce que j'ai compris et ce que tu pourrais faire :
    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
     
    class Fenetre_principale
    {
      private Trace_Cercle traceur;
      Fenetre_principale()
      {
        traceur = new Trace_Cercle();
        ... construction des JPanel, JTextField, JButton ...
      }
     
      listener_du_bouton( ... )
      {
        traceur.tracer_cercle( x, y, rayon, JPanel );
      }
    }
     
    class Trace_Cercle
    {
      ... constructeur ...
      tracer_cercle( int x, int y, int rayon, JPanel panel )
      {
        Graphics g = panel.getGraphics();
        g.drawOval( x - rayon / 2, y - rayon / 2, rayon * 2, rayon * 2 );
      }
    }
    Tu peux aussi choisir de dessiner sur un BufferedImage, et tracer_cercle ne prendrait en paramètre que le Graphics.
    En tout cas, tu as une technique possible, à toi de broder autour

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Mille mercis pour ton temps précieux que tu prends pour me répondre.
    Revenant à ta dernière réponse, je suis d'accord avec toi que j'ai un peu de mal à exprimer ce que je fais autant que j'en ai pour coder.

    Bref voici ce que j'ai fait :

    Classe pour tracer le cercle :

    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
    package Visualisation;
     
    import java.awt.Color;
    import java.awt.Graphics;
    import javax.swing.JPanel;
     
    /**
     *
     * @author apprenti_javaman
     */
    public class Affiche_TStation extends Affiche_Frame{
     
        void Affiche_TStation(){
            //System.out.println("Cordonnée X reçu : "+ X);
            //System.out.println("Cordonnée Y reçu : "+ Y);
            //System.out.println("Rayon reçu : "+ Rayon); 
        }
     
        public void tracer_cercle(int X, int Y, int Rayon, JPanel Tracage){
            Graphics g = Tracage.getGraphics();  
            //g.setPaintMode();     
            g.setColor(Color.cyan);            
            g.fillOval(X, Y, Rayon, Rayon);                            
            g.setColor(Color.blue);      
            g.fillRect(((X+(Rayon/2))-(Rayon/20)), ((Y+(Rayon/2))-(Rayon/20)), Rayon/10, Rayon/10);	 
        }
    }

    classe jouant le rôle de fenêtre principale :

    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 class Affiche_Frame extends JFrame {
        public int a,b,S;
        private Affiche_TStation traceur;
        public Affiche_Frame() {
            traceur = new Affiche_TStation();
            bouton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) 
                {
                // ici plein d'autres trucs => une JOptionpane au fait
                if (a!=0 && b!=0 && S!=0)
                            { 
                                traceur.tracer_cercle(a,b,S,schemas);
                            }
                 }
           });
    Maintenant le hic est que quand j’exécute, (après compilation bien entendu) la fenêtre principale se lance à l'infini, et je suis obligé de fermer d'urgence, pour éviter de planter le PC.

    Qu'en penses-tu STP ? encore une fois merci pour ton aide.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Milles fois désolé, j'ai trouvé :



    il fallait faire un extend JPanel et non Affiche_Frame, merci beaucoup pour ton aide précieux.

    ça marche

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Par contre, j'ai peut-être parlé trop vite avec la joie que j'avais, mon cercle s'efface à chaque fois que agrandis la fenêtre, alors que le but c'est de garder le cercle et d'en dessiner d'autres, tout en gardant les précedentes ...

    As-tu une méthode STP ?

  8. #8
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par Kidim Voir le message
    Par contre, j'ai peut-être parlé trop vite avec la joie que j'avais, mon cercle s'efface à chaque fois que agrandis la fenêtre, alors que le but c'est de garder le cercle et d'en dessiner d'autres, tout en gardant les précedentes ...

    As-tu une méthode STP ?
    Bien sûr
    Comme évoqué précédemment, il faut passer par un BufferedImage.
    Ton JPanel ne fait qu'afficher le BufferedImage. Tu dessines dessus via un Graphics, ça ne change pas.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    Bien sûr
    Comme évoqué précédemment, il faut passer par un BufferedImage.
    Ton JPanel ne fait qu'afficher le BufferedImage. Tu dessines dessus via un Graphics, ça ne change pas.
    Pffff, j'ai beaucoup de mal décidément ça ne marche vraiment pas, ou dois-je placer mon BufferedImage SVP ? regardez ma classe qui trace le cercle :

    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
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package Visualisation;
     
    import java.awt.AlphaComposite;
    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import javax.swing.JPanel;
     
    /**
     *
     * @author HackerLover
     */
    public class Affiche_TStation extends JPanel{
     
        void Affiche_TStation(){
            //Ceci est mon constructeur
        }
     
        public static BufferedImage getBufferedImage(Image img) {
            int w = img.getWidth(null);
            int h = img.getHeight(null);
            BufferedImage bImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
            Graphics2D g2 = bImage.createGraphics();
            g2.drawImage(img, 0, 0, null);
            return bImage;
        } 
        public void tracer_cercle(int X, int Y, int Rayon, JPanel Tracage){
            //BufferedImage hh = new BufferedImage(200, 200,BufferedImage.TYPE_BYTE_INDEXED);
            Graphics2D g = (Graphics2D)Tracage.getGraphics(); 
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f ));
            g.setColor(Color.blue);
            g.fillOval(X, Y, Rayon, Rayon);                            
            g.setColor(Color.blue);      
            g.fillRect(((X+(Rayon/2))-(Rayon/20)), ((Y+(Rayon/2))-(Rayon/20)), Rayon/10, Rayon/10);	
        }
    }

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 56
    Points : 48
    Points
    48
    Par défaut
    Bonjour,

    Perso, je ne passe pas pardes bufferedimage, je procède en gros comme ça :
    - je créer mon composant qui extends Jpanel
    - je créer un arraylist de mes segments
    - je créer un arraylist des couleurs des segments
    - dans le paint du composant, je trace mes segments situés dans l'arraylist des segments avec la couleur correspondante dans l'autre arraylist
    Voilou, c'est peut-être pas la meilleur solution, mais je l'ai adopté et c'est assez simple à mettre en place.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par dmfdmf Voir le message
    Bonjour,

    Perso, je ne passe pas pardes bufferedimage, je procède en gros comme ça :
    - je créer mon composant qui extends Jpanel
    - je créer un arraylist de mes segments
    - je créer un arraylist des couleurs des segments
    - dans le paint du composant, je trace mes segments situés dans l'arraylist des segments avec la couleur correspondante dans l'autre arraylist
    Voilou, c'est peut-être pas la meilleur solution, mais je l'ai adopté et c'est assez simple à mettre en place.
    Merci de ta réponse.

    Je vais essayer ça ce week-end, mais est-ce que dans ce cas les composants dessinés ne s'effacent pas au redimensionnement de la Frame ?

    Sinon as-tu le code de la classe et celle qui l'appelle ? si ce n'est pas trop demander bien entendu ?

    Merci encore

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    Bien sûr
    Comme évoqué précédemment, il faut passer par un BufferedImage.
    Ton JPanel ne fait qu'afficher le BufferedImage. Tu dessines dessus via un Graphics, ça ne change pas.
    Merci Dinobogan et aux autres d'ailleurs !

    Au fait j'ai reussi, il fallait transmettre le BufferedImage en argument à la classe Trace_Cercle, et il dessine dans le Buffered, les images s'affichent sans s'effacer au redimensionnement, mieux encore, se superposent les uns sur les autres et restent visibles ! parfait. Merci.

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

Discussions similaires

  1. jsp passer des paramètres à une autre page jsp
    Par smutmutant2003 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 30/09/2009, 16h24
  2. Passer des paramètres à une fonction dans before_filter
    Par abir84 dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 27/01/2008, 19h40
  3. Réponses: 4
    Dernier message: 05/11/2007, 09h19
  4. Réponses: 1
    Dernier message: 11/08/2007, 17h16
  5. Réponses: 1
    Dernier message: 29/05/2006, 10h04

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