Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1420 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  peti problem pour dessiner

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

peti problem pour dessiner

n°698299
brethold
Posté le 13-04-2004 à 14:34:20  profilanswer
 

Salut a tous , avant de venir poster ici j'ai lu pa mal de doc sur tt ce qui concerner le graphisme en java , et donc pour faire bien il faut deviser la zone de dessin de la fenetre.
C'est ce que j'ai essayer de faire pôur realiser ce peti programe qui sere a dessiner grace a la souri. Il marche tres bien quand je met le tt dans une seul classe mais tel qu'il est maintenant j'arrive pas a intercepter les evenements de la souri dans la zone de dessin.
Si kk1 pouvait m'expliquer ce qui cloche ou ce qu'il faut que je change ou meme un lien qui explique bien comment bien gerer les dessin en java ca serai sympas.
Voila le code ->
 

Code :
  1. // Importation des pakages dont on a besoin
  2. import javax.swing.*;
  3. import java.awt.event.*;
  4. import java.awt.*;
  5. import javax.swing.*;
  6. import java.util.*;
  7. /* On se sert d'un JPanel comme zone de dessin */
  8. class ZoneDessin extends JPanel
  9. {
  10. //  Variables de classe
  11. //  Allocation memoire des vecteurs ou on va stoker les coordonnees du dessin
  12. private Vector  X= new Vector();;
  13. private Vector  Y= new Vector();;
  14. private boolean trace=false;
  15. private Color couleurDessin=Color.BLACK;
  16. //  Constructeur  
  17. ZoneDessin(LayoutManager lm)
  18. {
  19.  //  Ajoue d'un ecouteur de souris pour intercepter les evenements : MousePressed et MouseReleased
  20.  addMouseListener(new MouseAdapter()
  21.  {
  22.   //  Quand l'utilisateur clique sur le bouton gauche de la souris
  23.   public void MousePressed(MouseEvent e)
  24.   {
  25.    //  on recupere les coordonnees du debut du dessin
  26.    X.addElement(new Integer(e.getX()));
  27.    Y.addElement(new Integer(e.getY()));
  28.   }
  29.   // Quand l'utilisateur relache le bouton de la souris
  30.   public void MouseReleased(MouseEvent e)
  31.   {
  32.    // On recupere les coordonnees de la fin du dessin
  33.    X.addElement(new Integer(e.getX()));
  34.    Y.addElement(new Integer(e.getY()));
  35.    //  Pour le premier a la methode paintComponent cette condition doit etre verifier car sinon
  36.    //  on obtien une exception de tableau vide dans la methode drawPolyline
  37.    trace=true;
  38.    //  On redessine la zone de dessin pour le cas ou le dessin est juste un point
  39.    repaint();
  40.   }
  41.  });
  42.  //  Ajoue d'un ecouteur de souris pour intercepter l'evenement : MouseDragged
  43.  addMouseMotionListener(new MouseMotionAdapter()
  44.  {
  45.   //  Quand l'utilisateur deplace la souris
  46.   public void MouseDragged(MouseEvent e)
  47.   {
  48.    // On recupere les coordonnees de la souris au fur et a mesure
  49.    X.addElement(new Integer(e.getX()));
  50.    Y.addElement(new Integer(e.getY()));
  51.    //  Pour le premier appel a la methode paintComponent cette condition doit etre verifier car sinon
  52.    //  on obtien une exception de tableau vide dans la methode drawPolyline
  53.    trace=true;
  54.    //  On redessine la zone de dessin  
  55.    repaint();
  56.   }
  57.  });
  58. }// Fin du constructeur
  59. /*  ZonneDessin est un composant swing qui herite de la le classe JComponent ( JPanel ici ) et donc possed une methode
  60.     paintComponent qu'il nous faut surcharger afin de dessiner dans notre zone de dessin        */
  61. public void paintComponent(Graphics g)
  62. {
  63.  //  L'appel à la version de superclasse de paintComponent garantit que le dessin se deroule selon la bonne
  64.  //  sequence et que le mecanisme de dessin de swing reste intact.
  65.  super.paintComponent(g);
  66.  /* On récupère la zone client */
  67.   g = getGraphics();
  68.  //  Utilisation de la classe Graphics2D.
  69.  Graphics2D g2d = (Graphics2D) g;
  70.  //  On selectionne la couleur du dessin
  71.  g2d.setColor(couleurDessin);
  72.  //  Allocation memoire d'un tableau qui a la taille du vecteur des coordonnees
  73.        int tabX[] = new int[X.size()];
  74.        int tabY[] = new int[Y.size()];
  75.             
  76.   if(trace)
  77.        {
  78.      
  79.         //  Conversion des vecteurs X et Y de Integer en tableaux d'entiers
  80.         for(int i=0 ; i< X.size() ; i++)
  81.         {
  82.           tabX[i]=((Integer)X.elementAt(i)).intValue();
  83.           tabY[i]=((Integer)Y.elementAt(i)).intValue();
  84.         }
  85.      
  86.         System.out.print("\n TAILLE DE X -> "+X.size());
  87.              
  88.         //  On relie les points qui sont stokes dans les tableaux
  89.        g2d.drawPolyline(tabX,tabY,X.size());
  90.     }
  91.    
  92.     // Destruction des tableaux
  93.         //tabX=null;
  94.      //tabY=null;      
  95.     
  96. }
  97. public void changeeCouleurDessin(Color c)
  98. {
  99.  couleurDessin=c;
  100. }
  101. //public Dimension getPreferedSize(Dimension d)
  102. //{
  103. // return d;
  104. //}
  105. }// Fin de la classe ZoneDessin
  106. //  Classe Dessin qui va contenir la zone de dessin ainsi que le menu
  107. class Dessin extends JFrame implements ActionListener, ItemListener
  108. {
  109. // Methode creerMenu
  110. public JMenuBar creerMenu()
  111. {
  112.  /*  Creation de la barre de menu */
  113.  JMenuBar barreDeMenu = new JMenuBar();
  114.  /*  Creation des menus */
  115.  JMenu menufichier = new JMenu("Fichier" );
  116.  JMenu menucouleur = new JMenu("Couleur" );
  117.  JMenu menustylo = new JMenu("Stylo" );
  118.  /* Creation des options des menus */
  119.  //  Menu Fichier  
  120.  JMenuItem option_ouvrir= new JMenuItem("Ouvrir" );
  121.  JMenuItem option_quitter= new JMenuItem("Quitter" );
  122.  //  Menu Couleur  
  123.  JMenuItem option_rouge=new JMenuItem("Rouge" );
  124.  JMenuItem option_bleu=new JMenuItem("Bleu" );
  125.  JMenuItem option_vert=new JMenuItem("Vert" );
  126.  JMenuItem option_Personaliser_la_couleur=new JMenuItem("Personaliser la couleur" );
  127.  //  Menu Stylo  
  128.  JMenuItem option_fin=new JMenuItem("fin" );
  129.  JMenuItem option_standart=new JMenuItem("standart" );
  130.  JMenuItem option_epais=new JMenuItem("epais" );
  131.  /* Ajoue des accelerateurs ( raccourcis clavier pour les menus ) */
  132.  menufichier.setMnemonic(KeyEvent.VK_F); // Raccourci clavier pour le menu Fichier
  133.  menucouleur.setMnemonic(KeyEvent.VK_C); // Raccourci clavier pour le menu Couleur
  134.  menustylo.setMnemonic(KeyEvent.VK_S); // Raccourci clavier pour le menu Stylo
  135.  /* Ajoue des accelerateurs ( raccourcis clavier pour les options des menus ) */
  136.  //  Menu Fichier  
  137.  option_ouvrir.setMnemonic('o');
  138.  option_quitter.setMnemonic('q');
  139.  //  Menu Couleur  
  140.  option_rouge.setMnemonic('r');
  141.  option_bleu.setMnemonic('b');
  142.  option_vert.setMnemonic('v');
  143.  option_Personaliser_la_couleur.setMnemonic('p');
  144.  //  Menu Stylo  
  145.  option_fin.setMnemonic('f');
  146.  option_standart.setMnemonic('s');
  147.  option_epais.setMnemonic('e');
  148.  /* Installation des ecouteurs pour intercepter les evenements que l'utilisateur declenche  
  149.     en choisisant une options de un des menus           */
  150.  //  Menu Fichier   
  151.  option_ouvrir.addActionListener(this);  // installation d'un écouteur d'action  
  152.  option_quitter.addActionListener(this); // installation d'un écouteur d'action  
  153.  //  Menu Couleur  
  154.  option_rouge.addActionListener(this);
  155.  option_bleu.addActionListener(this);
  156.  option_bleu.addActionListener(this);
  157.  option_Personaliser_la_couleur.addActionListener(this);
  158.  //  Menu Stylo  
  159.  option_fin.addActionListener(this);
  160.  option_standart.addActionListener(this);
  161.  option_epais.addActionListener(this);
  162.  /* Ajouts des options dans leurs conteneurs : menus */
  163.  //  Menu Fichier  
  164.  menufichier.add(option_ouvrir);
  165.  menufichier.add(option_quitter); 
  166.  //  Menu Couleur  
  167.  menucouleur.add(option_rouge);
  168.  menucouleur.add(option_bleu);
  169.  menucouleur.add(option_vert);
  170.  menucouleur.add(option_Personaliser_la_couleur);
  171.  //  Menu Stylo
  172.  menustylo.add(option_fin);
  173.   menustylo.add(option_standart);
  174.   menustylo.add(option_epais);
  175.   /* Ajouts des menus dans leurs conteneur : barre de menu */
  176.   barreDeMenu.add(menufichier);
  177.  barreDeMenu.add(menucouleur);
  178.   barreDeMenu.add(menustylo);
  179.   // On retourne la barre de menu qui contient nos menus  
  180.   return barreDeMenu;
  181.  }
  182.  public void actionPerformed(ActionEvent e) {}
  183.  public void itemStateChanged(ItemEvent e) {}
  184.  // Methode creer graphical user interface ou on va grouper la zone de dessin et le menu
  185.  static void creerGUI()
  186.  {
  187.   // Gestion de la decoration de la fenetre
  188.         JFrame.setDefaultLookAndFeelDecorated(true);
  189.   JFrame fenetre = new JFrame("Dessin" );
  190.   /* L'option DISPOSE_ON_CLOSE indique que c'est l'utilisateur qui
  191.    precise ce qui se passe a la fermeture de la fenetre  */
  192.         fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  193.        
  194.         // Creation et mise en forme du content pane de la fenetre qui contien la barre de menu et la zone de dessin
  195.  Dessin dessin = new Dessin();
  196.  ZoneDessin zonneD=new ZoneDessin(new FlowLayout());
  197.  fenetre.setJMenuBar(dessin.creerMenu());// On attache le menu a la fenetre
  198.  // On definit la taille de la fenetre par rapport a la taille de l'ecran
  199.   Dimension tailleEcran = Toolkit.getDefaultToolkit().getScreenSize();
  200.  int hauteur = (int)tailleEcran.getHeight();
  201.  int largeur = (int)tailleEcran.getWidth();
  202.  fenetre.setSize(largeur/2,hauteur/3);
  203.  // La dimension de la zone client est celle de la fenetre moins la taille de ces bords
  204.  zonneD.setSize(hauteur - (fenetre.getInsets().left+fenetre.getInsets().right),largeur - (fenetre.getInsets().bottom
  205.                         +fenetre.getInsets().top));
  206.  Container c=fenetre.getContentPane();
  207.  // On choisit la couleur de fond de la zone de dessin
  208.  zonneD.setBackground(Color.BLUE);
  209.  zonneD.setOpaque(true);
  210.  c.add(zonneD);
  211.  /* Centrage de la fenêtre par rapport à la fenêtre parente.
  212.    S'il n'y a pas de fenêtre parente, on centre par rapport à l'écran*/
  213.  fenetre.setLocationRelativeTo(fenetre.getParent());
  214.  // Affichage de la fenetre
  215.   fenetre.show();
  216. }
  217. /***************************************************/
  218.    /*        La méthode main            */
  219.    /***************************************************/
  220. public static void main(String[] args)
  221. {
  222.  // On lance l'application comme etant un thread
  223.  javax.swing.SwingUtilities.invokeLater(new Runnable() {
  224.             public void run() {
  225.                 creerGUI();
  226.             }
  227.         });
  228.     }
  229. }

:hello:

mood
Publicité
Posté le 13-04-2004 à 14:34:20  profilanswer
 

n°698403
brethold
Posté le 13-04-2004 à 16:31:42  profilanswer
 

j'ai trouve c tt con lool , les methodes MousePressed avec M magiscul ne sont jamais appeles donc j'intercepte jamais les evenements de la souris. Il falais juste mettre un change le m en miniscul.
Arf ca ma bloque + d'une journee une conerie com ca c pas juste !!!!!

n°698506
nraynaud
lol
Posté le 13-04-2004 à 18:26:07  profilanswer
 

brethold a écrit :

j'ai trouve c tt con lool , les methodes MousePressed avec M magiscul ne sont jamais appeles donc j'intercepte jamais les evenements de la souris. Il falais juste mettre un change le m en miniscul.
Arf ca ma bloque + d'une journee une conerie com ca c pas juste !!!!!

il y a des conventions de codage en java, tu devrais les lire avant de tenter de faire du dessin.


---------------
trainoo.com, c'est fini
n°698571
brethold
Posté le 13-04-2004 à 19:47:17  profilanswer
 

ohh kel precieu conseil merci j'ai grave avance grace a toi ;)

n°698572
lorill
Posté le 13-04-2004 à 19:48:41  profilanswer
 

brethold a écrit :

ohh kel precieu conseil merci j'ai grave avance grace a toi ;)


[:kiki]

n°698585
nraynaud
lol
Posté le 13-04-2004 à 19:54:21  profilanswer
 

brethold a écrit :

ohh kel precieu conseil merci j'ai grave avance grace a toi ;)

1) parce que je connais les conventions de codage, je n'aurais jamais fait cette erreur.
 
2) je t'emmerde.


---------------
trainoo.com, c'est fini
n°700069
pascal34
one point !
Posté le 15-04-2004 à 13:11:55  profilanswer
 

nraynaud a écrit :

1) parce que je connais les conventions de codage, je n'aurais jamais fait cette erreur.
 
2) je t'emmerde.


 
Les erreurs de frappe ça existe aussi.
 
Ca fait plusieurs année que je programme dans divers langages et j'en fais toujours
Malgré les IDE avec completion de code et tout le merdier, y'en a qui passe.

n°700071
nraynaud
lol
Posté le 15-04-2004 à 13:14:18  profilanswer
 

pascal34 a écrit :

Les erreurs de frappe ça existe aussi.

Sauf qu'à la relecture, ça saute aux yeux.


Message édité par nraynaud le 15-04-2004 à 13:15:04

---------------
trainoo.com, c'est fini
n°700182
pascal34
one point !
Posté le 15-04-2004 à 14:33:15  profilanswer
 

nraynaud a écrit :

Sauf qu'à la relecture, ça saute aux yeux.


 
Sauf que parfois entre m et M ça saute pas aux yeux si ça fait des heures que t'es devant ton écran à te faire chier à trouver ton erreur.  :ouch:  
 
 
 

n°700184
skeye
Posté le 15-04-2004 à 14:36:31  profilanswer
 

pascal34 a écrit :


 
Sauf que parfois entre m et M ça saute pas aux yeux si ça fait des heures que t'es devant ton écran à te faire chier à trouver ton erreur.  :ouch:  
 


Si tu respectais les conventions de codage à longueur de journée toute l'année, ce type d'erreur aurait de bonnes chances de te sauter aux yeux en 20s...

mood
Publicité
Posté le 15-04-2004 à 14:36:31  profilanswer
 

n°700224
pascal34
one point !
Posté le 15-04-2004 à 15:06:05  profilanswer
 

skeye a écrit :


Si tu respectais les conventions de codage à longueur de journée toute l'année, ce type d'erreur aurait de bonnes chances de te sauter aux yeux en 20s...  


 
Je suis tellement inprégné des conventions de nommage de Java que je les applique même dans les autres langages  :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  peti problem pour dessiner

 

Sujets relatifs
StringTokenizer, ou est le problem ? :/Unresolved Problem
[C#]problem de sauvegarde[VB] - Dessiner un graphique - Boucler sur l'indice d'un attribut ? oO
problem de donnees sous oraclepackage htmlunit - problem pour capter le formulaire
Dessiner un gadget dans un Graphics2DEST t ' il possible de dessiner dans un JTEXTAREa ??
script dans HTML + problem de cache avec ISA (un petit peut urgent)Problem de dimension de tableau en CSS
Plus de sujets relatifs à : peti problem pour dessiner


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR