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

 Java Discussion :

Problème d'initialisation d'un KeyEvent


Sujet :

Java

  1. #21
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Euh, on parle de KeyEventDispatcher depuis 17 posts.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(
       new KeyEventDispatcher() {
     
           @Override
           public boolean dispatchKeyEvent(KeyEvent e) {
    	    return demoDeplacement.getKeyStateHandler().dispatch(e);
           }
     
    });
    Tout simplement.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  2. #22
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    J'ai refait des recherches et j'ai réussit à faire ce que je voulais sans faire des trucs aussi compliqué que ce que tu m'a donné, ce n'est surement pas aussi optimisé mais voici mon code :

    mon KeyboardListener :

    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
    package props.fall;
     
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
     
     
    public class KeyboardListener extends KeyAdapter {
            Panneau panneau; 
     
            public KeyboardListener(Panneau panneau) {
                this.panneau = panneau;
            }
     
     
            @Override
            public void keyPressed(KeyEvent event) {
     
                 int keycode = event.getKeyCode();                         
                 switch (keycode) {
                        case KeyEvent.VK_LEFT:
                            panneau.DeplacementGauche1();
                            break;
                        case KeyEvent.VK_RIGHT:
                            panneau.DeplacementDroit1();
                            break;
                        case KeyEvent.VK_DOWN:
                            panneau.DeplacementBas1();
                            break;
                        case KeyEvent.VK_UP:
                            panneau.DeplacementHaut1();
                            break;
                        default:                 
                            break;
                 }
           }
     
            @Override
            public void keyReleased(KeyEvent event) {
     
                 int keycode = event.getKeyCode();                        
                 switch (keycode) {
                        case KeyEvent.VK_LEFT:
                            panneau.DeplacementGauche0();                       
                            break;
                        case KeyEvent.VK_RIGHT:
                            panneau.DeplacementDroit0();
                            break;
                        case KeyEvent.VK_DOWN:
                            panneau.DeplacementBas0();
                            break;
                        case KeyEvent.VK_UP:
                            panneau.DeplacementHaut0();
                            break;
                        default:                 
                            break;
                 }
           }
    }

    et le code l'utilisant :

    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
    package props.fall;
     
     
    import java.awt.Graphics;
    import javax.swing.JPanel;
     
    public class Panneau extends JPanel { 
        private int posXPersonnage;
        private int posYPersonnage;
        private int posXCaisse;
        private int posYCaisse;
        private int height;
        private int width;
        private int i = 0;
        private final Personnage pers = new Personnage();
        private final MurSol mursol = new MurSol();
        private final Fond fond = new Fond();
        private final Caisse caisse = new Caisse();
        private final KeyboardListener keyboardlistener = new KeyboardListener(this);
        boolean haut = false, bas = false, droit = false, gauche = false;
     
     
        @Override
        public void paintComponent(Graphics g){      
            setFocusable(true);
            if (i == 0){
                addKeyListener(keyboardlistener);
                i++;
            }
            if (posXPersonnage == 0 && posYPersonnage == 0){
                posXPersonnage = this.getWidth() / 2;
                posYPersonnage = this.getHeight() /2;
            }
     
     
            height = this.getHeight();
            width = this.getWidth();
            posXCaisse = 200;
            posYCaisse = 200;
            movement();
            fond.PaintFond(g, width, height);
            pers.PaintPersonnage(g, posXPersonnage, posYPersonnage);
            mursol.PaintMurSol(g, width, height);
            caisse.PaintCaisse(g, posXCaisse, posYCaisse);
            repaint();            
        }
     
        public void movement(){
            while (haut){
                posYPersonnage -= 5;
                break;
            }
            while (bas){
                posYPersonnage += 5;
                break;
            }
            while (droit){
                posXPersonnage += 5;
                break;
            }
            while (gauche){
                posXPersonnage -= 5;
                break;
            }
        }
     
        public void DeplacementHaut1(){
            haut = true;               
        }
     
        public void DeplacementBas1(){
            bas = true;               
        }
     
        public void DeplacementDroit1(){
            droit = true;              
        }
     
        public void DeplacementGauche1(){
            gauche = true;              
        }
     
        public void DeplacementHaut0(){
            haut = false;              
        }
     
        public void DeplacementBas0(){
            bas = false;                
        }
     
        public void DeplacementDroit0(){
            droit = false;               
        }
     
        public void DeplacementGauche0(){
            gauche = false;                
        }
    }

    Et il me permet de me déplacer en diagonale, ce que tu me disais impossible avec cette méthode.

  3. #23
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    J'ai jamais dit que c'était impossible : j'ai dit qu'il y avait un défaut, quand on lâchait une touche alors qu'on en avait appuyée deux de sens opposés (j'ai d'ailleurs donnée une solution qui fonctionnait me semble-t-il). Parce qu'il n'y avait plus d'évènement à partir de ce moment, problème que j'ai compensé par l'introduction d'un Timer.( D'ailleurs ton programme à ce défaut aussi. Alors, c'est sûr normalement, personne ne devrait faire haut/bas en même temps, ou droite/gauche en même temps, mais ça arrive sans arrêt que des utilisateurs fassent ce qu'on devrait pas. Cela dit, j'ai donné un exemple, qui avait ce défaut, et qui fonctionnait, et qui n'avait rien de plus compliqué que le tiens.)

    Toi tu as compensé le défaut par une des plus mauvaise pratique qui soit : appeler repaint() dans la méthode paint() (paintComponent() en fait, mais c'est pareil). Donc en fait, ton programme redessine continuellement le panel, inutilement, et en consommant du cpu pour rien. Peut-être que ça fonctionnne avec ton test, sur ta machine, avec le peu de choses que tu dessines, mais ça ne sera pas forcément toujours le cas. Et encore sur la mienne, qui est un peu puissante, j'ai pas le temps de voir le personnage se déplacer. Il est instantanément hors de la fenêtre (ou alors il faut que je passe les coordonnées en double, et utiliser un incrément de 0.1d, qu'il faudra ajuster, en fonction de ce qu'on affiche, et de la vitesse de la machine), donc pour moi, ce programme ne fonctionne pas.
    La méthode paint() doit faire le minimum de choses, et uniquement ce qui concerne le dessin : rendre focusable un composant n'a aucun sens dans cette méthode, tout comme y enregistrer un écouteur d'évènement.
    Et je ne vois nullepart dans ton code le bornage du déplacement de ton personnage. Et pourquoi le centrer s'il est au point haut-gauche : chaque fois qu'on revient à ce point, il revient au centre (c'est peut-être voulu remarque).

    Je cherchais à donner une solution propre, nette, pérenne et qui puisse être étendue, sans tout réadapter.

    Si tu veux négliger le défaut des touches opposées, soit, ta solution fonctionne (avec variable à état mais sans pseudo pile), mais remplace le repaint() par un Timer : comme-ça déjà tu contrôle le temps entre 2 positions, indépendamment de tout le reste (donc la vitesse de déplacement ne dépend ni de la machine, ni de ce qui y tourne, ni de ce que tu dessines), fait le repaint() quand c'est nécessaire.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #24
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Dans mon programme, si j'appuie que gauche et droit en même temps, mon personnage s'arrête, puis si je relâche une touche par exemple gauche il ira à droite, (mais je ne peux pas sauter lorsque gauche et droit sont enfoncé, seul défault qui ne me gène pas), donc je trouve ça logique et ça me convient. Ensuite le recentrage était pour résoudre un problème que j'avais, mais plus ici, je le change donc. Le bornage et autre n'étaient pas encore fait. pour le plus gros soucis, le repaint() ^^, je savais pas comment m'y prendre merci pour le Timer, mais je vois pas où le placer et comment il va redessiner à la place du repaint : je remet mon code complet (jusqu'au main).

    Main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    package props.fall;
     
     
    public class PropsFall {
     
        public static void main(String[] args) {
          new Fenetre();
     
        }
    }
    Ma fenetre :
    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
    package props.fall;
     
     
    import javax.swing.JFrame;
     
     
    public class Fenetre extends JFrame {
     
        private Panneau pan = new Panneau();
        private final KeyboardListener keyboardlistener = new KeyboardListener(pan);
        private int i = 0;
     
     
        public Fenetre(){
     
            this.setFocusable(true);
            this.setTitle("Props'Fall");
            this.setSize(1000, 1000);
            this.setResizable(true);
            this.setLocationRelativeTo(null);              
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
            this.setContentPane(pan);
            this.setVisible(true);
            if (i == 0){
                addKeyListener(keyboardlistener);
                i++;
            }
            //pan.Movement();?
            //pan.Gravity();?
            //Timer ici?
        }
    }
    Mon Panneau(dessin) :

    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
    package props.fall;
     
     
    import java.awt.Graphics;
    import javax.swing.JPanel;
     
    public class Panneau extends JPanel { 
        private int posXPersonnage;
        private int posYPersonnage;
        private int posXCaisse;
        private int posYCaisse;
        private int height;
        private int width;
        private int i = 0, j = 0, ii = 2;
        private final Personnage pers = new Personnage();
        private final MurSol mursol = new MurSol();
        private final Fond fond = new Fond();
        private final Caisse caisse = new Caisse();
        private boolean haut = false, droit = false, gauche = false, ausol = false, saut = false;
     
        @Override
        public void paintComponent(Graphics g){ 
            if(i == 0){
                posXPersonnage = getWidth() / 2;
                posYPersonnage = getHeight() -150;
                i++;
            }
            height = this.getHeight();
            width = this.getWidth();
            posXCaisse = 200;
            posYCaisse = 200;
            fond.PaintFond(g, width, height);
            pers.PaintPersonnage(g, posXPersonnage, posYPersonnage);
            mursol.PaintMurSol(g, width, height);
            caisse.PaintCaisse(g, posXCaisse, posYCaisse);
            Movement();
            Gravity();
            repaint();
            //Timer ici?
        }
     
        public void Movement(){
            while (haut){
                while(saut){
                    if(j <= 20){
                        j++;
                        posYPersonnage -= 20;
                        if(j == 20){
                            saut = false;                       
                        }
                    }
                    break;
                }    
                break;
            }
     
            while (droit){
                posXPersonnage += 5;
                if (posXPersonnage > this.getWidth() - 81){
                    posXPersonnage = this.getWidth() - 81;
                }
                break;
            }
            while (gauche){
                posXPersonnage -= 5;
                if(posXPersonnage < 51){
                    posXPersonnage = 51;
                }
                break;
            }
        }
     
        public void Gravity(){
            if (posYPersonnage < getHeight() - 85){
                ausol = true;
            }
            while(ausol){
                posYPersonnage += 10;
                break;
            }
            if (posYPersonnage >= getHeight() - 85){
                posYPersonnage = getHeight() - 85;
                ausol = false;
                saut = true;
                j = 0;
                ii = 2;
            }
        }
     
        public void StopSaut(){
            ii -= 1;
            j = 0;
            if(ii == 0){
                saut = false;
            }
        }
     
        public void DeplacementHaut1(){
            haut = true;               
        }
     
        public void DeplacementDroit1(){
            droit = true;              
        }
     
        public void DeplacementGauche1(){
            gauche = true;              
        }
     
        public void DeplacementHaut0(){
            haut = false;              
        }
     
        public void DeplacementDroit0(){
            droit = false;               
        }
     
        public void DeplacementGauche0(){
            gauche = false;                
        }
    }
    Mon KeyboardListener :

    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
    package props.fall;
     
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
     
     
    public class KeyboardListener extends KeyAdapter {
            Panneau panneau; 
     
            public KeyboardListener(Panneau panneau) {
                this.panneau = panneau;
            }
     
     
            @Override
            public void keyPressed(KeyEvent event) {
     
                 int keycode = event.getKeyCode();                         
                 switch (keycode) {
                        case KeyEvent.VK_LEFT:
                            panneau.DeplacementGauche1();
                            break;
                        case KeyEvent.VK_RIGHT:
                            panneau.DeplacementDroit1();
                            break;
                        case KeyEvent.VK_UP:
                            panneau.DeplacementHaut1();
                            break;
                        default:                 
                            break;
                 }
           }
     
            @Override
            public void keyReleased(KeyEvent event) {
     
                 int keycode = event.getKeyCode();                        
                 switch (keycode) {
                        case KeyEvent.VK_LEFT:
                            panneau.DeplacementGauche0();
                            break;
                        case KeyEvent.VK_RIGHT:
                            panneau.DeplacementDroit0();
                            break;
                        case KeyEvent.VK_UP:
                            panneau.DeplacementHaut0();
                            panneau.StopSaut();
                            break;
                        default:                 
                            break;
                 }
           }
    }
    Ici mon programme fonctionne mais avec le repaint (donc n'est pas réellement utilisable).

  5. #25
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Dans Panneau :
    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
    ...
     
    import javax.swing.Timer;
     
    ...
     
    private final Timer timer;
     
    ...
     
    public class Panneau ...
     
    public Panneau() {
     
        ...
     
            timer = new Timer(33, new ActionListener() {
     
             public void actionPerformed(ActionEvent event) {
     
                     // on mémorise la position actuelle du personnage
                     int x = posXPersonnage;
                     int y = posYPersonnage;
     
                     // on appelle les méthodes qui modifies les coordonnées du personnage
                    // bien sûr, il faut enlever les appels de ces méthodes de la méthode paint() 
                    movement();
                     gravity();
     
                     // si les coordonnées du personnage ont changé redessiner (sinon c'est pas la peine)
                     if ( x!=posXPersonnage || y!=yPersonnage ) {
                         repaint();
                     }
     
     
            }
     
        });
     
     
    }
     
    public void startAnim() {
        timer.start();
    }
     
    public void stopAnim() {
        timer.stop();
    }

    Pour démarrer :

    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
    public class Fenetre ...
     
    public Fenetre() {
     
    ...
     
    this.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosed(WindowEvent e) {
             pan.stopAnim();
        }
    });
     
    this.setVisible(true);
    pan.startAnim();
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #26
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Je te remercie pour ton aide précieuse. Je vais continuer à travailler mon code en regardant toutes les solutions que tu m'as donné. Je met en résolu le topic.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Problème d'initialisation
    Par Gryzzly dans le forum C
    Réponses: 3
    Dernier message: 26/12/2005, 12h24
  2. Problème d'initialisation de winsock
    Par benjiprog dans le forum C
    Réponses: 6
    Dernier message: 18/12/2005, 10h45
  3. Problème d'initialisation avec GLFW
    Par adrien357 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 23/10/2005, 18h29
  4. Problème d'initialisation variable tableau
    Par HeZiX dans le forum Langage
    Réponses: 3
    Dernier message: 08/06/2005, 16h30
  5. Pitié, aidez moi : Problème d'initialisation de postgreSQL
    Par ttalourd dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 16/11/2004, 12h10

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