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 :

[Thread] aide pour comprendre un exemple


Sujet :

2D Java

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 107
    Points : 48
    Points
    48
    Par défaut [Thread] aide pour comprendre un exemple
    Bonjour, j'ai le code java ci-dessous pour apprendre à utilisez les threads.
    Mais j'ai 2-3 problèmes, des zone d'ombre que je ne comprend 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
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
     import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import java.util.*;
    import javax.swing.*;
     
    public class BounceThread {
        public static void main(String[] args) {
            JFrame frame = new BounceFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    }
     
    class BallRunnable implements Runnable {
        public BallRunnable(Ball aBall, Component aComponent) {
            ball = aBall;
            component = aComponent;
        }
     
        public void run() {
            try {
                for (int i = 1; i <= STEPS; i++) {
                    ball.move(component.getBounds());
                    component.repaint();
                    Thread.sleep(DELAY);
                }
            } catch (InterruptedException e) {
            }
        }
     
        private Ball ball;
     
        private Component component;
     
        public static final int STEPS = 1000;
     
        public static final int DELAY = 5;
    }
     
    class Ball {
        public void move(Rectangle2D bounds) {
            x += dx;
            y += dy;
            if (x < bounds.getMinX()) {
                x = bounds.getMinX();
                dx = -dx;
            }
            if (x + XSIZE >= bounds.getMaxX()) {
                x = bounds.getMaxX() - XSIZE;
                dx = -dx;
            }
            if (y < bounds.getMinY()) {
                y = bounds.getMinY();
                dy = -dy;
            }
            if (y + YSIZE >= bounds.getMaxY()) {
                y = bounds.getMaxY() - YSIZE;
                dy = -dy;
            }
        }
     
        public Ellipse2D getShape() {
            return new Ellipse2D.Double(x, y, XSIZE, YSIZE);
        }
     
        private static final int XSIZE = 15;
     
        private static final int YSIZE = 15;
     
        private double x = 0;
     
        private double y = 0;
     
        private double dx = 1;
     
        private double dy = 1;
    }
     
    class BallPanel extends JPanel {
        public void add(Ball b) {
            balls.add(b);
        }
     
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g;
            for (Ball b : balls) {
                g2.fill(b.getShape());
            }
        }
     
        private ArrayList<Ball> balls = new ArrayList<Ball>();
    }
     
    class BounceFrame extends JFrame {
        public BounceFrame() {
            setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
            setTitle("BounceThread");
     
            panel = new BallPanel();
            add(panel, BorderLayout.CENTER);
            JPanel buttonPanel = new JPanel();
            addButton(buttonPanel, "Start", new ActionListener() {
                public void actionPerformed(ActionEvent event) {
                    addBall();
                }
            });
     
            addButton(buttonPanel, "Close", new ActionListener() {
                public void actionPerformed(ActionEvent event) {
                    System.exit(0);
                }
            });
            add(buttonPanel, BorderLayout.SOUTH);
        }
     
        public void addButton(Container c, String title, ActionListener listener) {
            JButton button = new JButton(title);
            c.add(button);
            button.addActionListener(listener);
        }
     
        public void addBall() {
            Ball b = new Ball();
            panel.add(b);
            Runnable r = new BallRunnable(b, panel);
            Thread t = new Thread(r);
            t.start();
        }
     
        private BallPanel panel;
     
        public static final int DEFAULT_WIDTH = 450;
     
        public static final int DEFAULT_HEIGHT = 350;
     
        public static final int STEPS = 1000;
     
        public static final int DELAY = 3;
    }
    Voilà le morceau de code que je ne comprend pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
         public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g;
            for (Ball b : balls) {
                g2.fill(b.getShape());
            }
        }
    Quand cette méthode est-elle appelée et que représente g ?

    merci

    [ Modéré par Bulbo ]
    Ajout d'un tag dans le titre
    Modification du titre
    Ajout des balises code
    Les Règles du Forum

  2. #2
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Points : 250
    Points
    250
    Par défaut
    toi tu as les livre au coeur de java ^^
    sinon c'ette methode est appelée en qqsorte a l'ajout de ton composant sur la frame c'est aussi cette methode qui est appelé avec repaint ^^

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 870
    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 870
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    53
    Par défaut
    Quand le repaint manager de Swing detecte que le composant a besoin d'etre redessine sur l'ecran, il appelle la methode paint() du composant. Cette methode-ci appelle ensuite divers methodes* dont paintComponent() qui est chargee de dessiner le composant lui-meme.

    *paintBorder(), paintChildren(), ...

    Il t'es egalement possible d'appeler manuellement paint() (avec le graphics approprie en parametre) quand tu veux par exemple dessiner ton composant dans une image ou l'imprimer.

Discussions similaires

  1. Aide pour comprendre un "group by" dans un exemple
    Par Johann7751 dans le forum Linq
    Réponses: 3
    Dernier message: 19/07/2011, 18h07
  2. Aide pour comprendre 2 séries d'instructions
    Par raou123 dans le forum Assembleur
    Réponses: 1
    Dernier message: 11/04/2006, 23h43
  3. Aide pour comprendre un code
    Par Spacy_green dans le forum Assembleur
    Réponses: 2
    Dernier message: 13/02/2006, 14h22
  4. Aide pour comprendre le code
    Par jfreuff dans le forum Assembleur
    Réponses: 2
    Dernier message: 31/01/2006, 18h54
  5. Réponses: 4
    Dernier message: 28/07/2005, 17h22

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