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 :

applet de dessin


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 19
    Points : 12
    Points
    12
    Par défaut applet de dessin
    Bonjour,

    je voudrais créer une applet qui me permette de dessiner, de sélectionner et de supprimer des points et des lignes. J'ai une classe Point et une classe Ligne. Chaque classe définit la structure d'un objet ainsi que ses méthodes.

    Je sais comment dessiner directement sur un panel. Mais j'aimerais créer de 4 boutons:un pour la création de points, un pour la création de lignes, un pour la sélection et le dernier pour la suppression.

    Je ne sais pas comment faire pour qu'au clic de la souris sur un bouton, je puisse par exemple dessiner un point ou une ligne ou sélectionner un point ou une ligne.

    Merci d'avance pour votre aide.

    Grace

  2. #2
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Bonjour,

    MouseListener, une Liste de Shapes, un JPanel dont on surcharge la méthode paintComponent. Une recherche sur le forum devrait te renvoyer sur des discussions intéressantes.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    merci xavlours, j'ai déjà utilisé tout ce que tu as cité et cela fonctionne.

    Je vais en profiter pour pposer un autre problème. Maintenant, ce que j'aimerais faire, c'est avoir deux panels : un qui va avoir tout les boutons et un sur lequel je dessine. Seulement, je n'arrive pas à faire communiquer les deux panels, je ne peux plus dessiner, il n'y a rien qui se produit. J'ai sûrement dû faire une erreur mais je ne sais pas à quel niveau.

    Le panel sur lequel on dessine à un MouseListener mais ce qu'il doit écouter, ce sont les clics sur le panel qui a tous les boutons.

    Je ne sais pas si c'est assez clair.

    Merci d'avance pour l'aide.

    gracerare

  4. #4
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Dans ton cas, je considèrerais que le clic sur un bouton modifie l'état de l'application (qui est défini par une/des variable(s) dans un des panels ou dans une autre classe). Je crois qu'un ButtonGroup serait pas mal, à voir.
    Ensuite, le MouseListener du panel de dessin tient compte de cet état pour savoir ce qu'il doit faire lorsqu'on clique (ou drag, avec MouseMotionListener).
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Encore une fois merci xavlours, j'ai pu résoudre mon problème.

    Maintenant, j'ai encore une autre question, j'aimerais savoir si je peux mettre ma souris à des coordonnées fixes?. En fait, je veux la mettre sur un point qui existe sur mon panel.

    Merci d'avance.

    grace

  6. #6
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Eh ben on peut dire que t'avances vite, toi,

    Pour déplacer la souris, tu peux utiliser la méthode Robot.mouseMove(int, int).
    Tu auras besoin de transformer des coordonnées d'un composant aux coordonnées de l'écran avec SwingUtilities.convertPointToScreen(Point, Component).
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    J'avais essayé avec la classe Robot mais sans transformer les coordonnées et je n'ai pas eu ce que je veux.
    Et après, je ne savais pas comment faire pour que la souris redevienne normale.

    Pour la transformation, les deux paramètres correspondent exactement à quoi? Point je suppose que c'est le point où je veux mettre la souris et le Component, je ne vois pas à quoi il correspond.

  8. #8
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Le composant est celui qui définit l'origine des coordonnées. Dans ton cas, c'est le JPanel qui affiche les Shapes. En fait, si tu veux viser un Point positionné à (30, 20) dans un JPanel positionné à (50, 55) dans une JFrame elle-même positionnée à (200, 300) dans l'écran, alors il faudrait appeler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Robot().mouseMove(280, 375);
    Plus simplement :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Point target = new Point(30, 20);
     
    Point robotTarget = SwingUtilities.convertPointToScreen(target, myJPanel);
    System.out.println(robotTarget.x); // affiche 280
    System.out.println(robotTarget.y); // affiche 375
     
    new Robot().mouseMove(robotTarget.x, robotTarget.y);
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    J'ai essayé ton code et j'ai cette erreur:

    The method convertPointToScreen(Point, Component) in the type SwingUtilities is not applicable for the arguments (Point, JPanel)

  10. #10
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Tu utilises bien un java.awt.Point et un javax.swing.JPanel ? Parfois, un clean et un rebuild permettent de passer des erreurs de compilateur comme celle là.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  11. #11
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    En fait la classe Point que j'utilise est ce lle que j'ai définie. Voilà pourquoi il y avait unn problème. Donc mes points qui sont créés il faut aussi que je les mette du type java.awt.Point?

  12. #12
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Oui, je crois qu'en matière de géométrie, les classes de l'API java.awt.geom font tout ce dont tu auras besoin.

    Si tu cherches à avoir une Shape qui soit un point, je crois avoir lu quelque part que le mieux au niveau performances était un Rectangle avec width et height à 1. A tester quand même, si tu as des problèmes de perfs.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  13. #13
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Pour le dessin de mon point, c'est bien un drawRect que j'utilise avec width et height à 1.

    Par contre, si j'ai défini mes propres classes, c'est parce que je vais créer des méthodes propres à chaque objet, autre que celles de awt.geom.

  14. #14
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    c'est bon, j'arrive à me mettre sur mon point.

    Maintenant, si je veux revenir en mode normal, c'est à dire que ma souris fonctionne normalement, que dois-je faire?

  15. #15
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Je n'utilise pas trop la classe Robot, mais je crois que la souris est toujours en "mode normal", l'utilisateur garde toujours la possibilité de bouger la souris. La méthode mouseMove ajoute juste un mouvement à ceux de l'utilisateur (un peu comme moi qui ai le trackpad et une souris USB activés en même temps).

    Je pense que c'est ça (d'après la javadoc et ce que j'ai pu lire sur le forum) mais je n'ai rien testé. Le curseur reste bloqué ?
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  16. #16
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Non, il ne reste pas bloqué, c'est juste que j'effectue l'action sur un déplacement de souris mouseMoved sur mon panel. En fait si mon bouton est sélectionné, dans mouseMoved, je positionne le curseur. Et je voudrais qu'en cliquant, cela s'arrête. Je ne sais pas si c'est assez clair?

  17. #17
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Je crois avoir compris. C'est le même principe que l'autre fois (quelques messages plus haut), il te faut une variable booléenne du style mouseControlActivated, que tu mets à true lorsque tu sélectionnes le bouton, et que tu mets à false dans mousePressed ou mouseClicked. Ensuite, dans mouseMoved, tu testes cette variable avant d'utiliser le Robot.

    Ca correspond à ce que tu veux faire, ou j'ai pas tout à fait compris ?
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  18. #18
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    merci xavlours, c'est ce que je veux faire.

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

Discussions similaires

  1. Integre applet ou dessiner
    Par iviath dans le forum JSF
    Réponses: 0
    Dernier message: 23/11/2009, 15h01
  2. Applet: dessiner une image dans une classe
    Par accion mutante dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 24/07/2009, 22h33
  3. Mauvaises performances lors du dessin d'une applet
    Par ____22 dans le forum Interfaces Graphiques en Java
    Réponses: 16
    Dernier message: 19/12/2007, 22h48
  4. Applet Java pour dessiner des camemberts
    Par lego22 dans le forum Graphisme
    Réponses: 3
    Dernier message: 06/06/2007, 00h18
  5. Réponses: 4
    Dernier message: 07/06/2004, 13h34

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