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 :

déplacement d'un rectangle


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Par défaut déplacement d'un rectangle
    Bonjour à tous ,

    Je débute en Java et j'essaie de réaliser un rectangle qui se déplace dans une fenêtre.
    Pour l'instant j'arrive à afficher un rectangle tout court mais pas de déplacement.
    voici mon 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
    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
     
    import java.awt.*;
    import javax.swing.*;
     
     
    class Point extends JPanel
    {
     
        //Les attributs
    	 int x ;
    	 int y ;
     
    	 //Le constructeur 
     
    	 public Point(int x , int y )
    	 {
    	 this.x = x ;
    	 this.y = y ;
    	 }
     
    	  public void paint (Graphics g)
    	 {
    	 g.setColor(Color.red);
    	 }
     
     
    }
     
    class Dessin_Rect extends Point
    {
     
        //Les attributs
    	 int largeur ;
    	 int longueur ;
     
    	 //Le Constructeur
     
    	 public Dessin_Rect(int x , int y , int largeur ,int longueur)
    	 {
     
    	 super( x , y) ;
    	 this.largeur = largeur ;
    	 this.longueur = longueur ;
     
    	 }
     
    	 //Redéfinition de la méthode paint()
     
    	 public void paint (Graphics g)
    	 {
    	 super.paint(g);
    	 g.fillRect( x , y , largeur , longueur ) ;
    	 }
    }
     
    //La classe qui va contenir la fenêtre
     
    class MonAffichage extends JFrame
    {
        //Les attributs
    	 Point A ;
    	 Dessin_Rect B ;
     
    	 //Le Constructeur
     
    	 public MonAffichage()
    	 {
    	 A = new Point(10,15) ;
    	 B = new Dessin_Rect(10,15,20,30) ;
    	 this.add(B);
    	 }
     
    }
     
    public class Test_Monaffichage
    {
     
       public static void main (String []argv)
    	{
    	MonAffichage essai = new MonAffichage();
    	essai.setSize(200,200);
    	essai.setVisible(true);
    	essai.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
     
    }
    J'aurai voulu utiliser par exemple la variable x et la faire évoluer par une boucle
    Donc pour utiliser x j'ai dans un autre essai utiliser les accesseurs mais dans ce cas ça ne complie pas.
    Je poste le code juste après.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Par défaut
    Voici la suite de mon message pour pas faire trop long.
    J'ai essayé d'utiliser un accesseur pour accéder à x et ainsi faire évoluer la valeur de x dans une boucle.
    Mais mon code ne compile pas j'ai le message : x is not public in java.awt.component; cannot be accessed from outside package

    Voici le code et merci d'avance pour toute l'aide que vous pourrez m'apportez.
    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
     
     
    import java.awt.*;
    import javax.swing.*;
     
     
    class Point extends JPanel
    {
     
        //Les attributs
    	 int x ;
    	 int y ;
     
    	 //Le constructeur 
     
    	 public Point(int x , int y )
    	 {
    	 this.x = x ;
    	 this.y = y ;
    	 }
     
    	  public void paint (Graphics g)
    	 {
    	 g.setColor(Color.red);
    	 }
     
        // Les accesseurs
    	 public int getX()
    	 {
    	 return x ;
    	 }
     
    	 public void SetX(int x)
    	 {
    	 this.x = x ;
    	 }
     
    }
     
    class Dessin_Rect extends Point
    {
     
        //Les attributs
    	 int largeur ;
    	 int longueur ;
     
    	 //Le Constructeur
     
    	 public Dessin_Rect(int x , int y , int largeur ,int longueur)
    	 {
     
    	 super( x , y) ;
    	 this.largeur = largeur ;
    	 this.longueur = longueur ;
     
    	 }
     
    	 //Redéfinition de la méthode paint()
     
    	 public void paint (Graphics g)
    	 {
    	 super.paint(g);
    	 g.fillRect( x , y , largeur , longueur ) ;
    	 }
    }
     
    //La classe qui va contenir la fenêtre
     
    class MonAffichage extends JFrame
    {
        //Les attributs
    	 Point A ;
    	 Dessin_Rect B ;
     
    	 //Le Constructeur
     
    	 public MonAffichage()
    	 {
    	 x = A.getX() ;
    	 A = new Point(x,5) ;
    	 B = new Dessin_Rect(x,15,20,30) ;
    	 this.add(B);
    	 }
     
    }
     
    public class Test_Monaffichage2
    {
     
       public static void main (String []argv)
    	{
    	MonAffichage essai = new MonAffichage();
    	essai.setSize(200,200);
    	essai.setVisible(true);
    	essai.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
     
    }

  3. #3
    Membre émérite

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Par défaut
    bonjour,

    x et y sont déja utilisé dans la classe java.awt.component tu ne peux les utiliser tu dois changer de nom de variable.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Par défaut
    Bonjour ,
    Effectivement le but est de réaliser des déplcements mais dans un premier temps j'aimerai dans mon main donner une valeur à x et le rectangle s'afficherait à cette valeur et une autre valeur à x et ainsi de suite.
    Pour le thread que ferait le thread ???

    Merci

  5. #5
    Membre émérite

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Par défaut
    Citation Envoyé par une_tite_question Voir le message
    Bonjour ,
    Effectivement le but est de réaliser des déplcements mais dans un premier temps j'aimerai dans mon main donner une valeur à x et le rectangle s'afficherait à cette valeur et une autre valeur à x et ainsi de suite.
    Pour le thread que ferait le thread ???

    Merci

    la plupart (pour ne pas dire toutes car je ne suis pas certain) des animations sont gerer par thread car il est facile d'endormir un thread pour un temps donné afin que l'animation ne soit pas instantané grace a la méthode sleep()

    on ne peut appliquer la méthode sleep a autre chose qu'un thread d'aprés ce que je sais... ton programme serai donc un thread dans lequel tu ferai varié x et y, afficher le rectangle et que tu endormirai durant un laps de temps défini a chaque fin de boucle par exemple. c'est comme ca que je le vois mais je peux me tromper

  6. #6
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut
    Salut,
    Tu peux te servir d'un timer swing pour réaliser une animation. Voici un 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
    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
     
     
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    public class AnimationTest{
     
        public static void main(String[] args){
     
     
            JFrame frame = new JFrame("Animation Test");
            frame.setSize(600, 400);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            AnimationPanel panel =new AnimationPanel(0, 10, 40, 30);
            Container container = frame.getContentPane();
            container.add(panel);
     
            frame.setVisible(true);
            panel.startAnimation();
     
        }
     
     
    }
     
    class AnimationPanel extends JPanel implements ActionListener{
     
     
        private int x;
        private int y;
        private int width;
        private int height;
        private Timer timer;
     
        public AnimationPanel(int x, int y, int w, int h){
     
            this.x = x;
            this.y = y;
            width = w;
            height = h;
            timer = new Timer(200, this); // 200 millesecondes;
        }
     
     
        public void paintComponent(Graphics g){
     
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g;
     
            g2d.setColor(Color.black);
     
            g2d.fillRect(x, y, width, height);
     
        }
     
        public void actionPerformed(ActionEvent event){
     
            /* Chaque fois que le timer appelle cette methode
             * modifier les coordonnées du rectangle et appeller
             * la methode repaint pour le redessiner
             */
     
            x = (x + 5) % 100;
            repaint();
     
        }
     
        public void startAnimation(){
     
            timer.start();
        }
     
        public void stopAnimation(){
     
                timer.stop();
            }
     
    }
    x et y sont déja utilisé dans la classe java.awt.component tu ne peux les utiliser tu dois changer de nom de variable.
    C'est incorrect. A ma connaissance il n'existe pas de variables x et y dans la classe Component et même si elles existent, rien n'empêche d'utiliser des noms pareils si les variables ne sont pas visibles par la sous classe c'est-à-dire elles sont déclarées private.

  7. #7
    Membre émérite

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Par défaut
    Citation Envoyé par Amine_sas Voir le message
    C'est incorrect. A ma connaissance il n'existe pas de variables x et y dans la classe Component et même si elles existent, rien n'empêche d'utiliser des noms pareils si les variables ne sont pas visibles par la sous classe c'est-à-dire elles sont déclarées private.

    Mais mon code ne compile pas j'ai le message : x is not public in java.awt.component; cannot be accessed from outside package
    je ne fais que traduire et les variables x et y ne sont pas déclaré private et sont visible.
    Et si tu vérifie dans les sources de la classe Component tu verras que x et y existe vraiment.

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

Discussions similaires

  1. Déplacement d'un rectangle en 2D
    Par Invité dans le forum Contribuez
    Réponses: 1
    Dernier message: 22/09/2017, 07h38
  2. Problème de déplacement des rectangles
    Par cornufreud dans le forum Général Python
    Réponses: 3
    Dernier message: 17/12/2012, 15h59
  3. Déplacement rectangle picturebox
    Par pierregr dans le forum VB.NET
    Réponses: 3
    Dernier message: 30/07/2012, 17h08
  4. Réponses: 3
    Dernier message: 11/05/2006, 11h32
  5. Limiter le déplacement de la souris
    Par el_bouleto dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/11/2002, 23h56

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