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

2D Java Discussion :

Tracer un graphique en 2D


Sujet :

2D Java

  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Par défaut Tracer un graphique en 2D
    Bonjour,

    tout d'abord, dsl de venir poser cette question ici, mais même si le sujet semble avoir été bien étudié, je n'arrive toujours pas à bien comprendre.

    Voilà mon problème :

    Je dispose d'un int[] mes valeurs et je veux dessiner le graph f(n)=int[n]
    dans une fenêtre.

    Cette fenêtre ne constitue pas la fenêtre principal de mon programme, et elle doit pouvoir se réduire et se rouvrir, comme un onglet.


    Il me semble que le plus naturel pour cela c'est d'utiliser graphics.drawLine(x1,y1,x2,y2)
    le pb c'est que ma fenêtre est vide...


    voici mon code, un très grand merci à ceux qui m'aideront

    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
     
     
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
    import java.awt.Color;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.image.BufferedImage;
     
     
    /**@author <a href="mailto:tanguy.lapegue@emn.fr"> tanguy </a>*/
     
    public class GraphiqueBourse extends JDialog{
     
     
    	public static final int DIM_H = 640; // Largeur en pixels de la fenetre
    	public static final int DIM_V = 480; // Hauteur en pixels de la fenetre
    	private static final long serialVersionUID = 1L;
    	private int indice;
     
    	private int[] mesValeurs=new int[GraphiqueBourse.NB_DONNEES];
    	private String[] mesDates=new String[GraphiqueBourse.NB_DONNEES];
    	public final static int NB_DONNEES=82;
     
     
     
    	public GraphiqueBourse(){
    		super();
    		this.build();
    		Image img = new BufferedImage(150,52,BufferedImage.TYPE_INT_RGB);
    		Graphics2D g2d = (Graphics2D)img.getGraphics();
     
    	     for(int i=0;i<GraphiqueBourse.NB_DONNEES-1;i++){
    	    	 this.indice=i;
    	    	 this.paintComponent(g2d);
    	     }
    	}
     
     
    	public  void build(){
     
    		File input =new File("donneeBourse.txt");
     
    		try {
    			FileInputStream fis =new FileInputStream(input);
    			InputStreamReader isr = new InputStreamReader(fis);
    			BufferedReader br= new BufferedReader(isr);
    			int i=0;
    			while(br.ready()){
     
    				String ligne=br.readLine();
    				StringTokenizer st= new StringTokenizer(ligne);
    				while(st.hasMoreTokens()){
    					String date;
    					date=st.nextToken();
    					Integer valeur = new Integer(st.nextToken());
    					this.mesValeurs[i]=valeur;
    					this.mesDates[i]=date;
    					i++;
    				}
    			}
    		} 
    		catch (FileNotFoundException e1) {
    			e1.printStackTrace();
    		} 
    		catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
     
    	private void paintComponent(Graphics g){
    		g.drawLine(this.indice,this.mesValeurs[this.indice],this.indice+1,this.mesValeurs[this.indice+1]);
    	        g.setColor(Color.red);
     
    		this.setVisible(true);
     
    		}
     
     
    }

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Le fond est bon, mais il y a pas mal d'erreurs

    Tu devrais te plonger dans les tutoriaux pour recaler tout ça, à mon sens le meilleur est Trail: Creating a GUI with JFC/Swing.

    Ici, nous ne pourrons t'aider que sur des points ponctuels ; voici les premiers que je peux voir sur ton code :

    - il ne faut pas appeler la méthode paintComponent, (sauf cas très exceptionnel), cette méthode sert à dessiner la composant sur demande de swing.
    - il faut encore moins appeler setVisible depuis paintComponent, mais depuis l'endroit où tu veux afficher ta fenêtre.
    - il faut appeler ses méthodes swing depuis le thread dispatching thread.

    Bref, tu gagneras BEAUCOUP de temps à lire et comprendre le lien que je te conseille ci dessus, il y a foultitude d'exemples qui marchent à partir desquels tu pourras travailler.

    Ah et puis sur mon blog je te conseille le FANTASTIQUE Hello Swing, bien sûr, programme unique en son genre.

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Dessiner des bouts de segments de droites est une approche tout a fait valide, viable et rapide, cependant si tu as besoin de dessiner de vraies courbles, il est egalement possible de dessiner des splines quadradiques et bicubiques a l'ecran via les classse Path2D (1.6+) et GeneralPath (l'equivalent d'un Path2D.Float). Evidement dessiner des courbes peut etre moins performant que dessiner des bouts de droites.
    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

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

Discussions similaires

  1. Tracer un graphique 3D avec f(x,y) inconnue
    Par StitchP dans le forum MATLAB
    Réponses: 4
    Dernier message: 22/08/2007, 13h54
  2. [Fortran 77] Tracer un graphique
    Par PiM12284 dans le forum Fortran
    Réponses: 8
    Dernier message: 18/07/2007, 15h22
  3. tracer un graphique
    Par zemontana dans le forum Windows Forms
    Réponses: 3
    Dernier message: 28/12/2006, 09h37
  4. Tracer un graphique
    Par Papagei dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 16/12/2005, 16h43
  5. Réponses: 6
    Dernier message: 22/11/2005, 17h08

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