Récupération de cours avec Java ?

Zone d'échange de sources C, C++, Java, VB, VBA et autres...

Modérateur : webmaster

20StylZ
Messages : 28
Enregistré le : 11/04/2006 19:17

QuoteDownloader

Message par 20StylZ » 23/05/2006 23:36

Bon je me suis amusé un peu et j'ai fait un mini programme qui récupère les cours, les affiches et les sauvegardes.
Voila à quoi ça ressemble :

Image

Donc le projet comporte 4 classes dont voici le code :

Cette classe contient le main qui execute le programme. C'est aussi la classe de la fenêtre :

Code : Tout sélectionner

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.WindowConstants;

public class MaFrame  extends JFrame
{
	private PanneauBoutons panneauBoutons;
	private MaTable tableQuotes;
	private JScrollPane scrollPane;
	
	public MaFrame()
	{
		setSize(530,600);
		setLocation(200,100);
		setTitle("QuoteDownloader by 20StylZ");
		
		tableQuotes = new MaTable();
		scrollPane = new JScrollPane(tableQuotes);
		scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		panneauBoutons = new PanneauBoutons(tableQuotes);
		
		getContentPane().add(panneauBoutons,BorderLayout.NORTH);
		getContentPane().add(scrollPane,BorderLayout.CENTER);
				
		setVisible(true);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	
	public static void main(String[] args) 
	{
		MaFrame f = new MaFrame();
	}
}
Cette classe est la classe principale. C'est celle du panneau qui contient les boutons et qui les écoutes :

Code : Tout sélectionner

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class PanneauBoutons extends JPanel implements ActionListener
{
	private JTextField ticker;
	private JTextField jourDebut;
	private JTextField moisDebut;
	private JTextField anneeDebut;
	private JTextField jourFin;
	private JTextField moisFin;
	private JTextField anneeFin;
	private JTextField fichierSave;
	private JButton boutonParcourir;
	private JButton boutonOk;
	private JButton boutonSave;
	
	private Quote quote;
	private MaTable tableQuote;
	
	public PanneauBoutons(MaTable tableQuote)
	{
		this.tableQuote = tableQuote;
		
		setPreferredSize(new Dimension(530,230));
		setBackground(new Color(224,226,235));
		setLayout(null);
		
		Font labelFont = new Font("helvetica",Font.PLAIN,17);
		
		JLabel labelTicker = new JLabel("Ticker");
		labelTicker.setBounds(50,30,50,15);
		labelTicker.setFont(labelFont);
		add(labelTicker);
		
		ticker = new JTextField();
		ticker.setBounds(180,25,70,25);
		add(ticker);
		
		JLabel labelDebut = new JLabel("Date de début");
		labelDebut.setBounds(50,65,150,15);
		labelDebut.setFont(labelFont);
		add(labelDebut);
		
		jourDebut = new JTextField();
		jourDebut.setBounds(180,60,40,25);
		add(jourDebut);
		
		moisDebut = new JTextField();
		moisDebut.setBounds(240,60,40,25);
		add(moisDebut);
		
		anneeDebut = new JTextField();
		anneeDebut.setBounds(300,60,60,25);
		add(anneeDebut);
		
		JLabel labelJJMMAA = new JLabel("(jj/mm/aaaa)");
		labelJJMMAA.setBounds(380,65,150,15);
		labelJJMMAA.setFont(new Font("helvetica",Font.PLAIN,13));
		add(labelJJMMAA);
		
		JLabel labelFin = new JLabel("Date de fin");
		labelFin.setBounds(50,100,150,15);
		labelFin.setFont(labelFont);
		add(labelFin);
		
		jourFin = new JTextField();
		jourFin.setBounds(180,95,40,25);
		add(jourFin);
		
		moisFin = new JTextField();
		moisFin.setBounds(240,95,40,25);
		add(moisFin);
		
		anneeFin = new JTextField();
		anneeFin.setBounds(300,95,60,25);
		add(anneeFin);
		
		JLabel labelJJMMAA2 = new JLabel("(jj/mm/aaaa)");
		labelJJMMAA2.setBounds(380,100,150,15);
		labelJJMMAA2.setFont(new Font("helvetica",Font.PLAIN,13));
		add(labelJJMMAA2);
		
		JLabel labelSave = new JLabel("Fichier de sauvegarde");
		labelSave.setBounds(50,130,200,20);
		labelSave.setFont(labelFont);
		add(labelSave);
		
		fichierSave = new JTextField();
		fichierSave.setBounds(230,130,130,25);
		add(fichierSave);
		
		boutonParcourir = new JButton("Parcourir");
		boutonParcourir.setBounds(380,130,90,25);
		boutonParcourir.setActionCommand("parcourir");
		boutonParcourir.addActionListener(this);
		add(boutonParcourir);
		
		boutonOk = new JButton("Télécharger");
		boutonOk.setBounds(100,180,150,25);
		boutonOk.setActionCommand("telecharger");
		boutonOk.addActionListener(this);
		add(boutonOk);
		
		boutonSave = new JButton("Sauvegarder");
		boutonSave.setBounds(280,180,150,25);
		boutonSave.setActionCommand("sauvegarder");
		boutonSave.addActionListener(this);
		add(boutonSave);
	}
	
	public void actionPerformed(ActionEvent evt) 
	{
		String cmd = evt.getActionCommand();
		
		if(cmd.equals("telecharger"))
		{
			quote = new Quote(ticker.getText(),
						anneeDebut.getText(),
						moisDebut.getText(),
						jourDebut.getText(),
						anneeFin.getText(),
						moisFin.getText(),
						jourFin.getText());
			
			Vector quotes = quote.getQuote();
			for&#40;int i = 0; i < quotes.size&#40;&#41;; i++&#41;
				for&#40;int ii = 0; ii < &#40;&#40;Vector&#41;quotes.get&#40;i&#41;&#41;.size&#40;&#41;; ii++&#41;
					tableQuote.setValueAt&#40;&#40;&#40;Vector&#41;quotes.get&#40;i&#41;&#41;.get&#40;ii&#41;,i,ii&#41;;
		&#125;
		else if&#40;cmd.equals&#40;"parcourir"&#41;&#41;
			&#123;
				JFileChooser fileC = new JFileChooser&#40;&#41;;
				fileC.addChoosableFileFilter&#40; new FiltreFichier&#40;&#41;&#41;;
				fileC.showSaveDialog&#40;this&#41;;
				
				if&#40;fileC.getCurrentDirectory&#40;&#41; != null && fileC.getSelectedFile&#40;&#41; != null&#41;
					fichierSave.setText&#40;fileC.getSelectedFile&#40;&#41;.getPath&#40;&#41;&#41;;
			&#125;
			else if&#40;cmd.equals&#40;"sauvegarder"&#41;&#41;
				sauvegarder&#40;fichierSave.getText&#40;&#41;,quote.getQuote&#40;&#41;&#41;;
			
	&#125;
	
	public void sauvegarder&#40;String chemin, Vector quotes&#41;
	&#123;
		if&#40;!chemin.equals&#40;""&#41;&#41;
		&#123;
			if&#40;!chemin.endsWith&#40;".txt"&#41;&#41; chemin += ".txt";			
			try &#123;
					BufferedWriter buffer = new BufferedWriter&#40;new FileWriter&#40;chemin, true&#41;&#41;;				
					for&#40;int i = 0; i < quotes.size&#40;&#41;; i++&#41;
					&#123;
						for&#40;int ii = 0; ii < &#40;&#40;Vector&#41;quotes.get&#40;i&#41;&#41;.size&#40;&#41;; ii++&#41;
							buffer.write&#40;&#40;String&#41;&#40;&#40;Vector&#41;quotes.get&#40;i&#41;&#41;.get&#40;ii&#41; + "\t"&#41;;
						
						buffer.newLine&#40;&#41;;
					&#125;
					buffer.close&#40;&#41;;
					JOptionPane.showMessageDialog&#40;this, "Fichier sauvegardé","",JOptionPane.WARNING_MESSAGE&#41;;
				&#125;
				catch &#40;IOException e&#41; &#123; System.out.println&#40;"Problème d'écriture"&#41;;	&#125;
		&#125;		
	&#125;
	
	public class FiltreFichier extends javax.swing.filechooser.FileFilter
	&#123;		
		public boolean accept&#40;File nom&#41;
		&#123;		
			return &#40;nom.getName&#40;&#41;.endsWith&#40;".txt"&#41;&#41;;
		&#125;

		public String getDescription&#40;&#41;
		&#123;
			return "Fichier Texte *.txt";
		&#125;
	&#125;
&#125;
Cette classe définit un objet qui représente les cours téléchargés. Elle reprend à peu près le code que j'avais posté précedemment :

Code : Tout sélectionner

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.StringTokenizer;
import java.util.Vector;

public class Quote 
&#123;
	private Vector quotes;
	
	public Quote&#40;String ticker, 
			String startYear, 
			String startMonth, 
			String startDay,
			String endYear, 
			String endMonth, 
			String endDay&#41;
	&#123;
		quotes = getQuotes&#40;ticker,startYear,startMonth,startDay,endYear,endMonth,endDay&#41;;
	&#125;
	
	public Vector getQuote&#40;&#41;
	&#123;
		return quotes;
	&#125;
	
	private Vector getQuotes&#40;String ticker, 
			String startYear, 
			String startMonth, 
			String startDay, 
			String endYear, 
			String endMonth, 
			String endDay&#41;
	&#123;
		Vector v = new Vector&#40;&#41;;
		String line = "";
		try &#123;
		startMonth = String.valueOf&#40;Integer.parseInt&#40;startMonth&#41; - 1&#41;;
		endMonth = String.valueOf&#40;Integer.parseInt&#40;endMonth&#41; - 1&#41;;
		URL url = new URL&#40;"http&#58;//ichart.finance.yahoo.com/table.csv?s=" + ticker + "&a=" + startMonth + "&b=" + startDay + "&c=" + startYear + "&d=" + endMonth + "&e=" + endDay + "&f=" + endYear + "&g=d&y=0&z=" + ticker + "&ignore=.csv"&#41;;			
		BufferedReader buffer = new BufferedReader&#40;new InputStreamReader&#40;url.openStream&#40;&#41;&#41;&#41;;
		for&#40;int count = 0; &#40;line = buffer.readLine&#40;&#41;&#41; != null; count++&#41;
		&#123;
			if&#40;count > 0&#41;
				v.add&#40;quoteParser&#40;ticker, line&#41;&#41;;	                
		&#125;
		buffer.close&#40;&#41;;
		&#125; 
		catch &#40;MalformedURLException e&#41; &#123;&#125;
		catch &#40;IOException e&#41; &#123; System.out.println&#40;"Mauvais ticker"&#41;;	&#125;
		
		return v;
	&#125;
	
	private Vector quoteParser&#40;String ticker, String line&#41;
    &#123;
        StringTokenizer sToken = new StringTokenizer&#40;line, ","&#41;;
        int count = 0;
        Vector quote = new Vector&#40;&#41;;
        try
        &#123;
            while&#40;sToken.hasMoreTokens&#40;&#41;&#41; 
                try
                &#123;
                    String token = sToken.nextToken&#40;&#41;;
                    if&#40;++count == 1&#41;
                    &#123;
                        StringTokenizer sToken2 = new StringTokenizer&#40;token, "-"&#41;;
                        String day = sToken2.nextToken&#40;&#41;;
                        if&#40;day.length&#40;&#41; == 1&#41;
                            day = "0" + day;
                        String month = monthNumber&#40;sToken2.nextToken&#40;&#41;&#41;;
                        String year = sToken2.nextToken&#40;&#41;;
                        int y = &#40;new Integer&#40;year&#41;&#41;.intValue&#40;&#41;;
                        if&#40;y < 10&#41;
                            year = "20" + year;
                        else
                            year = "19" + year;
                        String date = year + "/" + month + "/" + day;
                        quote.add&#40;ticker&#41;;
                        quote.add&#40;date&#41;;
                    &#125;
                    else quote.add&#40;token&#41;;
                    
                &#125;
                catch&#40;Exception exception&#41; &#123; &#125;
        &#125;
        catch&#40;Exception exception1&#41; &#123; &#125;
        return quote;
    &#125;
	
	private String monthNumber&#40;String s&#41;
    &#123;
        HashMap h = new HashMap&#40;&#41;;
        h.put&#40;"Jan", "01"&#41;;
        h.put&#40;"Feb", "02"&#41;;
        h.put&#40;"Mar", "03"&#41;;
        h.put&#40;"Apr", "04"&#41;;
        h.put&#40;"May", "05"&#41;;
        h.put&#40;"Jun", "06"&#41;;
        h.put&#40;"Jul", "07"&#41;;
        h.put&#40;"Aug", "08"&#41;;
        h.put&#40;"Sep", "09"&#41;;
        h.put&#40;"Oct", "10"&#41;;
        h.put&#40;"Nov", "11"&#41;;
        h.put&#40;"Dec", "12"&#41;;
        return &#40;String&#41;h.get&#40;s&#41;;
    &#125;
&#125;
Et pour finir, cette classe définit la JTable qui permet d'afficher les données. C'est un objet assez complexe mais tellement puissant (il gère tout seul les déplacements de colonnes et les selection/copier-coller et plein d'autres choses) :

Code : Tout sélectionner

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.util.Vector;

import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumnModel;

public class MaTable  extends JTable
&#123;
	public class MonTableModel extends AbstractTableModel 
	&#123;
		private Vector entete;
		private Vector quotes;
		
		public MonTableModel&#40;&#41;
		&#123;
			entete = new Vector&#40;&#41;;
			entete.add&#40;"Ticker"&#41;;
			entete.add&#40;"Date"&#41;;
			entete.add&#40;"Open"&#41;;
			entete.add&#40;"High"&#41;;
			entete.add&#40;"Low"&#41;;
			entete.add&#40;"Last"&#41;;
			entete.add&#40;"Volume"&#41;;
			entete.add&#40;"Adj Close"&#41;;
			
			quotes = new Vector&#40;&#41;;
			for&#40;int i = 0; i < entete.size&#40;&#41;; i++&#41;
				quotes.add&#40;new Vector&#40;&#41;&#41;;
		&#125;
		
		public String getColumnName&#40;int col&#41;
		&#123;
			return &#40;String&#41; entete.get&#40;col&#41;;
		&#125;
		
		public int getRowCount&#40;&#41;
		&#123;
			return &#40;&#40;Vector&#41;quotes.get&#40;0&#41;&#41;.size&#40;&#41;;
		&#125;
		
		 public int getColumnCount&#40;&#41;
		 &#123;
		 	return entete.size&#40;&#41;;
		 &#125;
		 
		 public Object getValueAt&#40;int row, int col&#41;
		 &#123;
		 	return &#40;&#40;Vector&#41;quotes.get&#40;col&#41;&#41;.get&#40;row&#41;;
		 &#125;
		 
		 public void setValueAt&#40;Object value, int row, int col&#41; 
		 &#123;
		     if &#40;value != null&#41; 
		     &#123;
		     	if &#40;row >= &#40;&#40;Vector&#41;quotes.get&#40;col&#41;&#41;.size&#40;&#41;&#41;
		     		&#40;&#40;Vector&#41;quotes.get&#40;col&#41;&#41;.add&#40;row,value&#41;;
		     	
		     	else &#40;&#40;Vector&#41;quotes.get&#40;col&#41;&#41;.set&#40;row,value&#41;;
		     &#125;
		     else for &#40;int i = 0; i < getColumnCount&#40;&#41;; i++&#41; 
		     			&#40;&#40;Vector&#41;quotes.get&#40;i&#41;&#41;.remove&#40;row&#41;;
		     
		     fireTableDataChanged&#40;&#41;;
		 &#125;
		 
		 public void clear&#40;&#41; 
		 &#123;
		     for &#40;int i = 0; i < entete.size&#40;&#41;; i++&#41;
		     		&#40;&#40;Vector&#41;quotes.get&#40;i&#41;&#41;.clear&#40;&#41;;

		     fireTableDataChanged&#40;&#41;;
		 &#125;
	&#125;
	
	public class monTableRenderer extends DefaultTableCellRenderer &#123;

		private Color alternativecolor; 
		private Color originalcolor; 

		public monTableRenderer&#40;&#41; 
		&#123;
			super&#40;&#41;;
			originalcolor=super.getBackground&#40;&#41;; // Ne pas modifier.
		
			alternativecolor= new Color&#40;204,255,255&#41;; // Valeur à préciser par défaut
		
		&#125;
    
		public void setAltBackground&#40;Color c&#41;
		&#123;
			alternativecolor = c;
		&#125;
    
		public void setOrgBackground&#40;Color c&#41;
		&#123;
			originalcolor = c;
		&#125;
    
		/*public Component getTableCellRendererComponent&#40;JTable table, Object value,
							  boolean isSelected, boolean hasFocus, int row, int col&#41; &#123;
			
			Component renderer = table.getDefaultRenderer&#40;table.getColumnClass&#40;col&#41;&#41;.getTableCellRendererComponent&#40;table, value, isSelected, false, row, col&#41;;

			if&#40;!isSelected&#41; &#123;
				if &#40;row%2==1&#41; &#123;
					renderer.setBackground&#40;alternativecolor&#41;;
				&#125;
				else &#123;
					renderer.setBackground&#40;originalcolor&#41;;
				&#125;
			&#125;
    		
			return renderer;
		&#125;*/
		public Component getTableCellRendererComponent 
	     &#40;JTable table, Object value, boolean isSelected,boolean hasFocus, int row, int col&#41; &#123;
	 
	     super.getTableCellRendererComponent&#40;table,value,isSelected,hasFocus,row,col&#41;;
	     //Modification de la police
	     Font f = getFont&#40;&#41;;
	     f = f.deriveFont&#40;&#40;float&#41;12&#41;;
	     setFont&#40;f&#41;;
	     //Couleurs
	     if &#40;isSelected&#41; &#123;
	       setBackground&#40;Color.blue&#41;;
	       setForeground&#40;Color.white&#41;;
	     &#125; else &#123;
	       setBackground&#40;Color.white&#41;;
	       setForeground&#40;Color.blue&#41;;
	     &#125;
	     return this;
	   &#125;
	&#125;
	
	public MaTable&#40;&#41;
	&#123;
		setModel&#40;new MonTableModel&#40;&#41;&#41;;
		setDefaultRenderer&#40;Object.class,new monTableRenderer&#40;&#41;&#41;;
		
		TableColumnModel model = getColumnModel&#40;&#41;;	
        model.getColumn&#40;1&#41;.setPreferredWidth&#40;100&#41;;
        model.getColumn&#40;6&#41;.setPreferredWidth&#40;100&#41;;
	&#125;
&#125;
Voilà par contre j'ai fait ça vite fait il n'y a quasiment aucun controle des erreurs...
Mais j'ai fait 2-3 trucs sympa comme un filtre pour les fichiers textes...

Renard du Désert
Messages : 55
Enregistré le : 21/02/2006 22:37
Contact :

Félicitation

Message par Renard du Désert » 25/05/2006 09:54

Félicitation pour ton outil
Félicitation pour l'avoir diffuser

Il ne me reste plus qu'à me mettre au Java avec un tel début pour me lancer
:wink:

gigi
Messages : 1000
Enregistré le : 09/01/2005 20:30
Localisation : Paris
Contact :

Exemple Graphique Java

Message par gigi » 25/05/2006 19:13

Merci pour ton code... Je l'ai testé, et ça marche du premier coup. :)
Pour les débutants comme moi, il faut juste compiler à partir du dernier fichier, sinon, on a des erreurs, car les "class" n'existent pas encore....
Compiler donc dans l'ordre suivant les fichiers de 20StylZ:
Quote.java
MaTable.java
PanneauBoutons.java
MaFrame.java (programme principal)
Voilà, il ne me reste plus qu'à m'y mettre sérieuesement pour mon objectif (c'est pour les options: j'ai quelques formules à mettre...): avec cet exemple complet, ça devrait aller... Il manque juste un exemple d'affichage graphique. :wink:

20StylZ
Messages : 28
Enregistré le : 11/04/2006 19:17

Message par 20StylZ » 26/05/2006 20:24

Merci pour les compliments, ça fait toujours plaisir, surtout que ça me fait réviser :D

Mais qu'entends tu par exemple d'affichage graphique gigi ? C'est pas ça que tu voulais :?:

gigi
Messages : 1000
Enregistré le : 09/01/2005 20:30
Localisation : Paris
Contact :

Affichage graphique

Message par gigi » 26/05/2006 20:50

En fait, d'affichage graphique, c'est un "plot" que je voulais faire, même si avec les chiffres toutes les infos sont là. C'est sûr que je commencerai par le type d'affichage que tu as fait (ne serais-ce pour vérifier mes calculs !), mais ensuite, c'est un graphe, du type de ceux sur Boursorama, mais avec mes propres infos, et non le cours des actions: en fait, je compte afficher l'engagement en "delta" d'une part, puis aussi la perte de valeur temps encaissée par jour, ... Donc des graphes qui se suivent mais ne correspondant pas aux mêmes mesures en sortie. Sinon, typiquement, je souhaite que ça resemble à ça (pompé sur bourso...):

[img]C:\Documents and Settings\Administrateur\Mes documents\Mes images\graph.jpg[/img]
Bon ça marche pas, alors je pompe le principe: (tbd)

Image

Image


Image
Modifié en dernier par gigi le 26/05/2006 21:25, modifié 1 fois.

20StylZ
Messages : 28
Enregistré le : 11/04/2006 19:17

Message par 20StylZ » 26/05/2006 21:21

Trop fort gigi, tu dois quand même savoir qu'avant de mettre une image sur un forum il faut l'upper quelque part sur le net comme sur imageshack...

Sinon j'avais pas compris, c'est l'affichage d'un graphique que tu veux et pas un affichage graphique...
Alors pour ça moi j'utilise une librairie open source que je trouve terrible. Il s'agit de JFreeChart
Tu peux trouver une démo http://www.jfree.org/jfreechart/jfreech ... -demo.jnlp qui te permet de voir tous les types de graphs que tu peux faire et y'en a un paquet...

Si un des graphs t'interesses, je peux faire un petit exemple d'utilisation si tu veux.

gigi
Messages : 1000
Enregistré le : 09/01/2005 20:30
Localisation : Paris
Contact :

Insérer des graphs...

Message par gigi » 26/05/2006 21:32

Ben si, je me doutais bien qu'il fallait uploader... Mais sait-on jamais, ça aurait pu être plus simple. :lol:

Bon, alors j'ai tenté avec http://www.savefile.com/
... Mais dans ce cas, il faut charger soit même le fichier

Donc, j'ai pris ta méthode, mais le fichier est minuscule à l'affichage ? :oops:

Regardes moi ça !! :

Image

Bon enfin, l'essentiel, c'est le contenu...

Je vais regarder sur le site que tu m'indiques.
Sinon, oui, je veux bien un exemple. :wink:

20StylZ
Messages : 28
Enregistré le : 11/04/2006 19:17

Message par 20StylZ » 26/05/2006 21:47

Tu y es presque pour l'upload d'image !
En fait celle que tu viens de poster n'est qu'une miniature (thumbnail) de ton image originale et en cliquant dessus, on tombe sur l'original. Ca permet de leur économiser de la bande passante ou quand tu postes beacoup d'images...
Mais ils te fournissent aussi un lien direct vers l'image uploadée et c'est ce lien qu'il faut mettre si tu veux voir l'original. :wink:

Sinon je veux bien faire un exemple mais indique moi quel type de graph tu veux parcqu'il y en a des dizaines et leurs utilisations sont différentes (ça serait trop beau...)

gigi
Messages : 1000
Enregistré le : 09/01/2005 20:30
Localisation : Paris
Contact :

Plot graph.

Message par gigi » 26/05/2006 21:47

J'ai été voir le site.
Alors j'en fait quoi du fichier xml que t'a envoyé en lien (copie ci dessous) ??

Code : Tout sélectionner

<?xml version="1.0" encoding="utf-8"?>

<jnlp spec="1.0+" 
      codebase="http&#58;//www.jfree.org/jfreechart/" 
      href="jfreechart-1.0.0-demo.jnlp">
  <information>
    <title>JFreeChart 1.0.0 Demo</title>
    <vendor>Object Refinery Ltd</vendor>
    <homepage href="http&#58;//www.object-refinery.com/" />
    <description>A demo for the JFreeChart class library</description>
    <description kind="short">An application showing a variety of charts that can be generated with JFreeChart.</description>
    <description kind="tooltip">JFreeChart 1.0.0 Demo</description>
    <offline-allowed />
  </information>
  <resources>
    <j2se version="1.4+" initial-heap-size="12m" max-heap-size="256m" />
    <jar href="jfreechart-1.0.0-demo-all.jar" />
  </resources>
  <application-desc main-class="demo.SuperDemo" />
</jnlp>
Sinon, j'ai été voir à http://www.jfree.org/jfreechart/
Dans les exemples qu'ils donnent, il y en a 2 qui correspondent à ce que je cherche:
Image
et
Image
Ho, là les images marchent !! :D :D :D

Donc je veux bien un exemple basé sur l'un ou l'autre de ces graphes.


PS: J'ai parcouru rapidement le site de JFreeChart. Il y a des APIs avec docs, des trucs à charger sur SourceForge, la classe "JCommon", etc, etc...
Si tu peux, dis moi exactement ce qu'il faut que je prenne, que je ne me perde pas dans ces méandres !
Modifié en dernier par gigi le 26/05/2006 21:52, modifié 1 fois.

20StylZ
Messages : 28
Enregistré le : 11/04/2006 19:17

Message par 20StylZ » 26/05/2006 21:51

XML :?: non le lien est une application java qui doit s'ouvrir toute seule il me semble...

OK pour les graphes je vais voir ce que je peux faire mais ça devient dur, les partiels approchent :cry:

Pour JFreechart, il te faut 2 librairie (jar) : JCommon et JFreechart.
Ensuite pour faire un projet avec, il faut les ajouter au projet.
C'est assez simple avec Eclipse mais je ne sais pas comment on fait quand on compile directement par ligne de commande. Ca doit etre une option de compilation.

Mais j'espère que tu t'es mis à Eclipse, indispensable si tu veux devenir un pro du java :wink:

gigi
Messages : 1000
Enregistré le : 09/01/2005 20:30
Localisation : Paris
Contact :

Lien "jfreechart-1.0.0-demo.jnlp"

Message par gigi » 26/05/2006 21:57

Ben non, il s'ouvre pas tout seul le lien !
Et quand je choisis "IE", c'est le texte qui s'affiche. Bizzarre.
J'ai recopié le lien http://www.jfree.org/jfreechart/ pour aller voir le site en fait.

J'ai parcouru la doc (en ligne). Eh ben, il y en as des tartines !

Si j'ai pas d'exemple, je crois que j'utiliserai pas cette usine à gaz ! :wink:

Sinon, c'est pas pressé pour le graph! ça peut attendre largement la fin des partiels !

Sinon, he bien, je ne me suis pas encore mis à "Eclipse"... Je compile en ligne, car au moins, je vois ce que je fais (en particulier pour les dépendances, que j'ai vu dans ton précédent exemple, que j'aurai sans doute pas remarqué si j'avais utilisé un environnement et mis tous les fichiers dedans !)
Promis, je vais le chercher sur le Web, et le charger !

20StylZ
Messages : 28
Enregistré le : 11/04/2006 19:17

Message par 20StylZ » 26/05/2006 22:08

En effet c'est très bizzare, moi quand je clique dessus ça me demande avec quoi je veux l'ouvrir (firefox) et j'ai comme choix "Java Web Start Launcher"
Si t'as pas ça c'est qu'il faut que tu telecharges le web start je pense.

La doc est assez volumineuse je te l'accorde mais comme je te disais, cette librairie est énorme et permet vraiment de faire n'importe quel type de graphique.

Mais si tu choisis de ne pas l'utiliser, tu vas devoir recoder entièrement un module d'affichage de graphique et donc réinventer la roue :D et en plus, tu ne pourras pas utiliser toutes les fonctionnalités de JFreechart et je peux te dire qu'elles sont nombreuses...

Bon d'accord je suis passé par là jusqu'au jour ou j'ai découvert JFreechart... :lol:

gigi
Messages : 1000
Enregistré le : 09/01/2005 20:30
Localisation : Paris
Contact :

Expérience !

Message par gigi » 26/05/2006 22:16

Et oui, on recode souvent quelque chose d'existant... C'est agacant de voir que d'autres ont fait mieux que soi avant, et qu'on a dépensé de l'énergie pour rien, n'est-ce pas ? :wink:

Bon, j'ai chargé la doc d'install qui semble bien faite (jfreechart-1.0.0-install.pdf), et les deux packages (jfreechart-1.0.1.zip et jcommon-1.0.4.zip).

Sinon, je pense qu'effectivement j'ai pas le "web start" comme tu dis !
Mais c'est bizarre, car les appelts Java de boursorama fonctionnent ?

Bon, je vais sur http://www.eclipse.org/ pour charger l'IDE maintenant. :wink:

20StylZ
Messages : 28
Enregistré le : 11/04/2006 19:17

Message par 20StylZ » 26/05/2006 22:24

Oui c'est assez agaçant mais bon je me dis que si tout le monde passe par là y'a bien une raison... :D

Sinon pour le web start, ça sert pas pour les applet mais pour les "full application".

Mais encore une fois, arrete les lignes de commandes je t'assure tu comprendra beacoup plus de choses parcque je pense pas que l'aspect compilation soit fondamental...

gigi
Messages : 1000
Enregistré le : 09/01/2005 20:30
Localisation : Paris
Contact :

Compil..

Message par gigi » 26/05/2006 22:41

Tu as raison. Je suis en train de charger Eclipse (il y en a pour plus d'1 heure encore !!) à cette fin. Je ne m'occuperais plus de la compil...

Sinon, comme je te le disais dans le précédent post, c'est à ça que sert l'expérience: à s'économiser -pour le même résultat, voire pour un résultat meilleur-, en prenant ce qui existe, et en ne refaisant pas ce qui existe en mieux ailleurs...

Mais c'est vrai que je pense aussi qu'il faut passer par la base, du moins au début, pour comprendre plus facilement ce qu'il y a derrière par la suite.... même si le résultat n'est peut-être pas aussi satisfaisant au final ! C'est à ça que sert la formation... refaire ce qui existe pour apprendre soi-même.

Au fait, l'image en grand dont on parle depuis tout à l'heure, et qui fait l'objet d'un TP pour toi... :wink:
(en fait, j'avais pas lu le "Hotlink for forums (1)" et le "Thumbnail for forums (1)")

Image

Donc en abscisse, je compte mettre le temps qui s'écoule (comme dans l'exemple), et avoir de multiples graphes pour les différentes options (un peu comme le graphe avec sa moyenne mobile d'une part, et les volumes d'autre part)

Répondre

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités