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

Graphisme Java Discussion :

dessiner en java


Sujet :

Graphisme Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 29
    Points : 18
    Points
    18
    Par défaut dessiner en java
    salut,

    avec la methode paint j'ai dessiné un rectangle;
    j'ai cré un bouton, et quand je clique sur ce bouton je veux qu'il dessine des lignes dans le rectangle, en fait je veux qu'il execute juste les deux derniers ligne de la methode paint, est ce possible?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void paint(Graphics g){
    	g.drawRect(100, 100, WIDTH, HEIGHT);
    	int X=100;
    	while (X!=300){X=X+UNITE;
    	g.drawLine(100,X,300,X);}
                 // je veux executer ce qui suit quand je clique sur le bouton
    	Graphics2D ca=(Graphics2D)g;
    	ca.draw(creerAiguille());
       	}
    thx

  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,

    en fait, ton composant doit avoir plusieurs états : un dans lequel il ne dessinera pas tout, et un dans lequel il dessinera les lignes supplémentaires. Si tu n'as que deux états, une variable booléenne (par exemple paintAiguille) suffira.

    Dans la méthode paint, tu testes la valeur de ta variable paintAiguille pour savoir si tu dois dessiner les lignes.

    Le bouton change juste la valeur de paintAiguille et appelle repaint().
    "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
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 29
    Points : 18
    Points
    18
    Par défaut ok
    yes ca marche; en fait j'avais déja essayé mais sans résultat car la fenetre se raffraichi pas! en revanche quand je deplace la fenetre hors ecran et que je la raméne, là je vois bien les new dessin.
    fo une commande spéciale pour raffraichir le dessin?

  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
    Normalement, il suffit d'appeler repaint() sur le composant voulu. Ensuite, pour tout ce qui est déplacement/redimensionnement/minimisation, la jvm s'en charge toute seule.
    "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
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 29
    Points : 18
    Points
    18
    Par défaut excellent
    ok ca marche, désolé étant débutant je ne fais pas attention a mon code assez automatiquement,

    derniere question ca genere bien une aiguilles, ensuite je veux faire une boucle :
    tant que le bouton arreter n'est pas cliquer
    {
    tu dessine des aiguilles
    }

    le pb c'est qu'il desssine les aiguilles a une vitesse monstrueuse et l'appli ne capte pas quand je clique sur le btn arreter, d'ailleur mon pc ne repond plus du tout! je dois redemarrer, la boucle prend toute les ressource a priori.
    je peux dire tu genere une aiguille toute les demi seconde...peut etre le timer?

  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
    Ok, alors pour faire ça, je te conseille d'utiliser une liste pour stocker tes aiguilles (synchronisé, ça peut jouer).

    Pour peindre les aiguilles, tu parcours cette liste et tu dessines les formes qu'il faut.

    Pour ajouter des aiguilles, je te conseille un timer Swing (javax.swing.Timer) qui rajoute simplement une aiguille dans la liste tous les n temps.
    "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
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 850
    Points
    22 850
    Billets dans le blog
    51
    Par défaut
    Et d'appeler repaint() juste apres l'ajout.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 29
    Points : 18
    Points
    18
    Par défaut ouai oaui
    merci pour vos réponse, cependant c'est pas si évident; j'ai essayé de voir sur le web cette aprem et pis ben pas trop avancé, oulala dur dur tout ca..

    voilà comment j'ai placé mon timer mais qui marche pas:
    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
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import javax.swing.*;
    import javax.swing.Timer;
     
    public class testt extends Frame implements ActionListener {
     
    private static final long serialVersionUID = -8079663597720234003L;
    private JButton b1,b2,b3;
    private Timer horloge;
    Label tirage;
    Label pi;
    int paintaiguille=0;
    int stoppaintaiguille=0;
     
     
    public testt(String titre) {
     setTitle("Aiguille de Buffon");
     this.setBackground(Color.white);
     Panel pb= new Panel();
     pb.setBackground(Color.darkGray);
     pb.setLayout( new FlowLayout(FlowLayout.CENTER));
     b1 = new JButton("Quitter");
     b1.addActionListener(this);pb.add(b1);
     b2 = new JButton("Démarrer");
     b2.addActionListener(this);pb.add(b2);
     b3= new JButton("Arrêter");
     b3.addActionListener(this);pb.add(b3);
     tirage=new Label("Nombre de tirage:");add(tirage);
     //pi=new Label("Approximation de Pi: ");//add(pi);
     this.add("South",tirage);
     this.add("North",pb);
     horloge=new Timer(1000,this);
    }
     
    private static final int UNITE = 20;//largeur latte
    private static final int WIDTH = 10 * UNITE;//parquet
    private static final int HEIGHT = 10 * UNITE;//parquet
    private static final int SIZE = UNITE / 2;//aiguille
     
     
    private static Line2D creerAiguille() {
       double x = Math.random() * WIDTH + 100;//position aleatoire point aiguille
       double y = Math.random() * HEIGHT + 100;
       Point2D.Double p1 = new Point2D.Double(x, y);
       Point2D.Double p2 = new Point2D.Double(x + SIZE, y);
       AffineTransform.getRotateInstance(Math.random() * 2 * Math.PI, x, y)
       .transform(p2, p2);
       return new Line2D.Double(p1, p2);
      }
     
    public void paint(Graphics g){
    	g.drawRect(100, 100, WIDTH, HEIGHT);
    	int X=100;
    	while (X!=300){X=X+UNITE;
    	g.drawLine(100,X,300,X);}
    	if (paintaiguille==1){
    		Graphics2D ca=(Graphics2D)g;
    		ca.draw(creerAiguille());
    	}}
     
    public static void main (String args[]) {
    testt f = new testt("");
    f.setBounds(200, 200, 500, 400);
    f.setVisible(true);
    f.addWindowListener(new WindowAdapter(){
    	public void windowClosing(WindowEvent evt){
    		System.exit(0);
    	}});}
     
    public void actionPerformed(ActionEvent e) {
    	String bouton=e.getActionCommand(); 
    	if (bouton.equals("Quitter")){System.exit(0);}
    	{if (bouton.equals("Démarrer")){paintaiguille=1;repaint();horloge.start();}}
    	if (bouton.equals("Arrêter")){}	
    	}
    }

    ca me sort ca comme erreur:
    java.lang.NullPointerException
    at testt.actionPerformed(testt.java:74)
    at javax.swing.Timer.fireActionPerformed(Unknown Source)
    at javax.swing.Timer$DoPostEvent.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

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

Discussions similaires

  1. dessin polygone java
    Par maid dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 29/05/2007, 13h56
  2. dessin réalisable? Java 2D ou autre
    Par TabrisLeFol dans le forum Graphisme
    Réponses: 19
    Dernier message: 19/04/2007, 12h00
  3. Dessiner en java avec plusieurs classes
    Par keub51 dans le forum 2D
    Réponses: 12
    Dernier message: 04/03/2007, 21h46
  4. dessin en java
    Par menuge dans le forum Graphisme
    Réponses: 4
    Dernier message: 01/06/2006, 18h36
  5. Dessiner en Java
    Par ankou82 dans le forum 2D
    Réponses: 15
    Dernier message: 07/04/2006, 10h28

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