peti problem pour dessiner

peti problem pour dessiner - Java - Programmation

Marsh Posté le 13-04-2004 à 14:34:20    

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:

Reply

Marsh Posté le 13-04-2004 à 14:34:20   

Reply

Marsh Posté le 13-04-2004 à 16:31:42    

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 !!!!!

Reply

Marsh Posté le 13-04-2004 à 18:26:07    

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
Reply

Marsh Posté le 13-04-2004 à 19:47:17    

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

Reply

Marsh Posté le 13-04-2004 à 19:48:41    

brethold a écrit :

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


[:kiki]

Reply

Marsh Posté le 13-04-2004 à 19:54:21    

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
Reply

Marsh Posté le 15-04-2004 à 13:11:55    

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.

Reply

Marsh Posté le 15-04-2004 à 13:14:18    

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
Reply

Marsh Posté le 15-04-2004 à 14:33:15    

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:  
 
 
 

Reply

Marsh Posté le 15-04-2004 à 14:36:31    

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...

Reply

Marsh Posté le 15-04-2004 à 14:36:31   

Reply

Marsh Posté le 15-04-2004 à 15:06:05    

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:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed