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

Interfaces Graphiques en Java Discussion :

Quand et dans quels cas utiliser les méthodes repaint() et validate()?


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre du Club Avatar de kayzra
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 68
    Points
    68
    Par défaut Quand et dans quels cas utiliser les méthodes repaint() et validate()?
    Je souhaiterai savoir si il est toujours nécessaire d'appeler les méthode repaint() et revalidate() / validate() quand on modifie dynamiquement des conteneurs ou des composants?

    De plus faut-il appeler ces méthodes avant ou après l'affichage dans le code ?

    Merci d'avance d'éclairer ma lanterne de débutant autodidacte en Java et qui par conséquent ne peux s'appuyer que sur vos conseils.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Personnellement j'utilise ce genre de méthode uniquement quand l'interface graphique nécessite d'être redessiner

  3. #3
    Membre régulier Avatar de L8O8L
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 148
    Points : 115
    Points
    115
    Par défaut
    J'avais une question a ce sujet :

    -> JE veux tracer une croix de haut en bas et de gauche à droite dont le centre est la souris.
    Je met ca sur un panel mais quand je veux que la croix ne "colorie" pas le panel, j'utilise la fonction repaint() et tout le panel se recharge. Vu que c'est un graphique il se repaint et c'est assez long a charger.
    Comment faire, n'y a-t-il pas une autre methode.

  4. #4
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Je souhaiterai savoir si il est toujours nécessaire d'appeler les méthode repaint() et revalidate() / validate() quand on modifie dynamiquement des conteneurs ou des composants ?
    Ca dépend ce que tu appelles "modifier". Si c'est ajouter/redimensionner/déplacer des composants alors oui il va falloir revalider dans la plupart des cas je pense. Si c'est rendre visible ou invisible un composant, pas besoin. Et une fois ton composant validé, il faut rafraichir l'affichage et donc utiliser #repaint.

    De plus faut-il appeler ces méthodes avant ou après l'affichage dans le code ?
    Je ne comprends pas la question. C'est quoi "l'affichage dans le code" ?


    Sinon la javadoc de ces méthodes est assez claire je trouve. Il faut la lire.

  5. #5
    Membre du Club Avatar de kayzra
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 68
    Points
    68
    Par défaut
    Excusez mon manque de clarté, j'ai posté cette question à 7h00 du mat, j'avais pas encore avalé mon café

    Ca dépend ce que tu appelles "modifier".
    je voulais dire par exemple modifier l'icone du composant ou lorsque l'on ajoute un composant à un conteneur dynamiquement.

    Je ne comprends pas la question. C'est quoi "l'affichage dans le code" ?
    Je voulais dire avant ou aprés un appel de setVisible(true)

    Et comme la question de L8L m'interesse aussi est-il possible d'appliquer un repaint() que sûr une partie d'un conteneur?

  6. #6
    Membre régulier Avatar de L8O8L
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 148
    Points : 115
    Points
    115
    Par défaut
    Merci de te ralier a ma cause ^^

  7. #7
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Grosso merdo

    Un repaint ne lancera que les opérations de dessin (c'est à dire l'appel à paint et par là même à paintComponent)

    Un validate ou revalidate va déclencher par contre un revalidation complète du composant c'est à dire qu'il va recalculer le layout, donc redimensionner tous les composants fils et les replacer, puis lancer un paint et ainsi de suite.

  8. #8
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par kayzra
    Et comme la question de L8L m'interesse aussi est-il possible d'appliquer un repaint() que sûr une partie d'un conteneur?
    faut fouiller un peu dans la javadoc de temps en temps au lieu de croiser les orteils à attendre qu'on vous ponde tout.

    Oui c'est possible, et c'est tout simplement la méthode repaint avec des paramètres différents, à vous de trouver laquelle

  9. #9
    Membre régulier Avatar de L8O8L
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 148
    Points : 115
    Points
    115
    Par défaut
    A chaque fois que je post, j'me fais incendié c'est bon! ca va !!

    J'ai un enorme taf a faire en tres peu de temps, desolé s'il faut tout chercher par soit même et tout trouver !!

    Et tu veux savoir, ca ne répond même pas a ma question...

  10. #10
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par L8O8L
    A chaque fois que je post, j'me fais incendié c'est bon! ca va !!
    J'ai un enorme taf a faire en tres peu de temps, desolé s'il faut tout chercher par soit même et tout trouver !!
    Et tu veux savoir, ca ne répond même pas a ma question...
    Citation Envoyé par javadoc
    repaint

    public void repaint(int x,
    int y,
    int width,
    int height) Repaints the specified rectangle of this component. If this component is a lightweight component, this method causes a call to this component's paint method as soon as possible. Otherwise, this method causes a call to this component's update method as soon as possible.
    Note: For more information on the paint mechanisms utilitized by AWT and Swing, including information on how to write the most efficient painting code, see Painting in AWT and Swing.

    Parameters:x - the x coordinatey - the y coordinatewidth - the widthheight - the heightSince:JDK1.0See Also:
    bref, tu appliques ceci seulement à la région qui t'intéresse...

  11. #11
    Membre régulier Avatar de L8O8L
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 148
    Points : 115
    Points
    115
    Par défaut
    Certe je l'avais vu, c'est pour ca que je dis que ca ne repond pas a ma question car :
    Je veux tracer une croix de haut en bas et de gauche à droite dont le centre est la souris.

  12. #12
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Dans ce cas là utilises le GlassPane de ta JFrame ou un LayeredPane.

    Il te suffit de créer une classe héritant de JComponent qui dessine ta croix.

    Exemple:

    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
     
     
    import java.awt.AWTEvent;
    import java.awt.Component;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.Toolkit;
    import java.awt.event.AWTEventListener;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
     
    import javax.swing.JButton;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.SwingUtilities;
     
     
    public class CrossComponent extends JComponent implements AWTEventListener{
        private final JFrame frame;
        private boolean displayed;
        private int mouseX;
        private int mouseY;
     
        @Override
        protected void paintComponent(Graphics g) {
            // TODO Auto-generated method stub
            super.paintComponent(g);        
            if(displayed) {        
                g.drawLine(mouseX, 0,mouseX, getHeight());
                g.drawLine(0, mouseY,getWidth(), mouseY);
            }
        }
     
     
     
     
     
     
        public boolean isDisplayed() {
            return displayed;
        }
     
     
     
     
     
        public void setDisplayed(boolean displayed) {
            this.displayed = displayed;
        }
     
     
     
     
     
        /**
         * @param displayed
         */
        public CrossComponent(boolean displayed, JFrame frame) {
            this.displayed = displayed;
            this.frame = frame;
            Toolkit.getDefaultToolkit().addAWTEventListener(this,AWTEvent.MOUSE_EVENT_MASK);
            Toolkit.getDefaultToolkit().addAWTEventListener(this,AWTEvent.MOUSE_MOTION_EVENT_MASK);
        }
     
     
     
     
     
        public void eventDispatched(AWTEvent arg0) {
            // TODO Auto-generated method stub
            if(arg0 instanceof MouseEvent) {
     
                MouseEvent event = (MouseEvent) arg0;
                if (!SwingUtilities.isDescendingFrom(event.getComponent(), frame)) { 
                    return; 
                } 
                Point point = new Point(mouseX,mouseY);
                 if (event.getID() == MouseEvent.MOUSE_EXITED && event.getComponent() == frame) { 
                        //point = null; 
                    } else { 
                        MouseEvent converted = SwingUtilities.convertMouseEvent(event.getComponent(), event, frame.getGlassPane()); 
                        point = converted.getPoint(); 
                    } 
                mouseX = point.x;
                mouseY = point.y;
                repaint();
                //forward(event);
            }
     
        }
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            final JFrame f = new JFrame();
            JButton b = new JButton("toto");
            b.addActionListener(new ActionListener() {
     
                public void actionPerformed(ActionEvent arg0) {
                    JOptionPane.showMessageDialog(null, "Hello World");
     
                }
     
            });
            f.add(b);
            CrossComponent c = new CrossComponent(true, f);
            f.setGlassPane(c);
            f.getGlassPane().setVisible(true);
            f.setSize(200,200);
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            f.setLocationRelativeTo(null);
            f.setVisible(true);
     
        }
    }

  13. #13
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par L8O8L
    Certe je l'avais vu, c'est pour ca que je dis que ca ne repond pas a ma question car :
    Plutôt que poser une question brute de décoffrage, dis au moins ce que tu as déjà cherché et trouvé et pourquoi ça ne te convient, on ne peut pas le deviner. Ca fera gagner du temps à tout le monde.

    Citation Envoyé par kayzra
    modifier l'icone du composant
    Pas besoin de revalidate si l'icône est de même dimension par exemple. M'enfin lis la javadoc ça explique bien.

    Citation Envoyé par kayzra
    Je voulais dire avant ou aprés un appel de setVisible(true)
    Pareil, lire la javadoc... revalidate ne sert que si le composant est visible.

  14. #14
    Membre régulier Avatar de L8O8L
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 148
    Points : 115
    Points
    115
    Par défaut
    Merci je vais essayer ton code

    Jte redi ca, mais la je suis sur une piste de buffer d'image.... ^o)

    Enfin je redi ca

  15. #15
    Membre régulier Avatar de L8O8L
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 148
    Points : 115
    Points
    115
    Par défaut
    Allelhuia!!!! Ca marche!! J'ai utilisé une image buffurisé et c tout bon.

    Merci qd meme C'est sympa

Discussions similaires

  1. Réponses: 55
    Dernier message: 18/03/2014, 13h11
  2. Réponses: 17
    Dernier message: 05/03/2014, 15h03
  3. Dans quel cas utiliser PHP, .Net ou Java ?
    Par mic79 dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2008, 19h58
  4. Réponses: 14
    Dernier message: 03/04/2008, 02h44
  5. [Zope] Dans quel cas utiliser zope ?
    Par kalimero dans le forum Zope
    Réponses: 3
    Dernier message: 26/07/2005, 10h08

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