Graphique en bâton

Soyez le premier à donner votre avis sur cette source.

Snippet vu 17 773 fois - Téléchargée 17 fois

Contenu du snippet

Une classe permettant de créer des graphiques en bâton , plusieurs mises en forme sont disponnibles ( avec ou sans repères/légendes , couleurs déradée ou unies , couleurs différentes pour chaque bâton ou non , valeures inscrites au dessu des batons ou pas ....) , ce n'est rien d'extraordinaire mais ca montre quand meme l'utilisation de la methode paint(Graphics g) et la converstion en Graphics2D.

Certainement à ameliorer quand j'aurais plus de temps .

Source / Exemple :


/*

  • @author Tlaloc
  • /
import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JPanel; public class Graph extends JPanel{ //le type de graphique que l'on souhaite public static final int VALUES_ONLY = 0; public static final int VALUES_AND_STRING = 1; public static final int VALUES_STRING_AND_COLOR = 2; public static final int VALUES_STRING_COLOR_AND_LADDER = 3; public static final int VALUES_AND_COLOR = 4; public static final int VALUES_AND_LADDER = 5; //les proprietées private int CURRENT_TYPE = 0; private Object[] VALUES = null ; private Object[][] _VALUES = null ; private Object[][] LADDER = null ; public Graph(){ super(); setOpaque ( true ); setBackground(Color.WHITE); setSize(800,600); setBounds(0,0,800,600); setLayout(null); } public void createGraph(){ repaint(); } @Override public void paint(Graphics g){ //pour avoir le fonds blanc g.setColor(Color.WHITE); g.fillRect(0, 0, getSize().width, getSize().height); //on place la légende avant d'ajouter les valeurs try{ if(CURRENT_TYPE == VALUES_STRING_COLOR_AND_LADDER || CURRENT_TYPE == VALUES_AND_LADDER ){ for ( int i = 0 ; i < LADDER.length ; i++){ try{ g.setColor(Color.RED); g.drawLine(0, getSize().height-(Integer)LADDER[i][0],getSize().width , getSize().height-(Integer)LADDER[i][0]); g.setColor(Color.BLACK); g.drawString( LADDER[i][1].toString(), 10,getSize().height-(Integer)LADDER[i][0]); } catch(Exception e){System.out.println("!");} } } } catch (NullPointerException e){ System.err.println( "Missing type Exception_ Veuillez renseigner le type de graphique"); e.printStackTrace(); return ; } //on dessine apres les valeurs en fonction de la demande if ( CURRENT_TYPE == VALUES_ONLY || CURRENT_TYPE == VALUES_AND_LADDER){ //recuperation de la valeur maximale des stats a traiter int max = getMaxValue(true); //on recupere le rapport proportionel valeur / hauteur du graph float rapport = (float)((float)(getSize().height-50 )/ (float)max); //calcul de la position x des batons int sizeX = ((getSize().width)-((VALUES.length*20)+20))/VALUES.length; //convertion du graphics en grahics2D pour l'effet de dégradé Graphics2D g2 = (Graphics2D)g; for ( int i = 0 ; i < VALUES.length ; i ++ ){ int locationY = (getSize().height-(int)(rapport * (Integer)VALUES[i])); int locationX = (i*sizeX)+(i*20)+20; g2.setPaint(new GradientPaint(0,0,Color.BLUE,getSize().width,getSize().height,Color.GREEN,true)); g2.fillRect( locationX , locationY , sizeX, 600 ); g.setColor(Color.BLACK); g.drawRect(locationX , locationY , sizeX, 600 ); } } if (CURRENT_TYPE == VALUES_AND_STRING){ //recuperation de la valeur maximale des stats a traiter int max = getMaxValue(false); //on recupere le rapport proportionel valeur / hauteur du graph float rapport = (float)((float)(getSize().height-50 )/ (float)max); //calcul de la position x des batons int sizeX = ((getSize().width)-((_VALUES.length*20)+20))/_VALUES.length; //convertion du graphics en grahics2D pour l'effet de dégradé Graphics2D g2 = (Graphics2D)g; for ( int i = 0 ; i < _VALUES.length ; i ++ ){ int locationY = (getSize().height-(int)(rapport * (Integer)_VALUES[i][0])); int locationX = (i*sizeX)+(i*20)+20; g2.setPaint(new GradientPaint(0,0,Color.BLUE,getSize().width,getSize().height,Color.GREEN,true)); g2.fillRect( locationX , locationY , sizeX, 600 ); g.setColor(Color.BLACK); g.drawRect(locationX , locationY , sizeX, 600 ); g.drawString(_VALUES[i][1].toString(), locationX, locationY-10); } } if(CURRENT_TYPE == VALUES_STRING_AND_COLOR || CURRENT_TYPE == VALUES_STRING_COLOR_AND_LADDER ){ //recuperation de la valeur maximale des stats a traiter int max = getMaxValue(false); //on recupere le rapport proportionel valeur / hauteur du graph float rapport = (float)((float)(getSize().height-50 )/ (float)max); //calcul de la position x des batons int sizeX = ((getSize().width)-((_VALUES.length*20)+20))/_VALUES.length; for ( int i = 0 ; i < _VALUES.length ; i ++ ){ int locationY = (getSize().height-(int)(rapport * (Integer)_VALUES[i][0])); int locationX = (i*sizeX)+(i*20)+20; g.setColor((Color)_VALUES[i][2]); g.fillRect(locationX , locationY , sizeX, 600 ); g.setColor(Color.BLACK); g.drawRect(locationX , locationY , sizeX, 600 ); g.drawString(_VALUES[i][1].toString(), locationX, locationY-10); } } if(CURRENT_TYPE == VALUES_AND_COLOR){ //recuperation de la valeur maximale des stats a traiter int max = getMaxValue(false); //on recupere le rapport proportionel valeur / hauteur du graph float rapport = (float)((float)(getSize().height-50 )/ (float)max); //calcul de la position x des batons int sizeX = ((getSize().width)-((_VALUES.length*20)+20))/_VALUES.length; for ( int i = 0 ; i < _VALUES.length ; i ++ ){ int locationY = (getSize().height-(int)(rapport * (Integer)_VALUES[i][0])); int locationX = (i*sizeX)+(i*20)+20; g.setColor((Color)_VALUES[i][1]); g.fillRect(locationX , locationY , sizeX, 600 ); g.setColor(Color.BLACK); g.drawRect(locationX , locationY , sizeX, 600 ); } } } private int getMaxValue(boolean isSingleTable){ if (isSingleTable){ int max = 0 ; for ( int i = 0 ; i < VALUES.length ; i ++ ){ if( (Integer)VALUES[i] > max){ max = (Integer)VALUES[i]; } } return max ; } else{ int max = 0 ; for ( int i = 0 ; i < _VALUES.length ; i ++ ){ if( (Integer)_VALUES[i][0] > max){ max = (Integer)_VALUES[i][0]; } } return max ; } } //les getters public int getType(){ return CURRENT_TYPE ; } public Object[] getValues(){ return VALUES ; } public Object[][]getMiltipleValues(){ return _VALUES; } public Object[] getLadder(){ return LADDER; } //les setters public void setType(int type){ CURRENT_TYPE = type ; } public void setValues( Object [] values){ VALUES = values ; } public void setValues( Object [][] values){ _VALUES = values ; } public void setLadder(Object [][] ladder){ LADDER = ladder ; } }

A voir également

Ajouter un commentaire

Commentaires

Messages postés
9
Date d'inscription
samedi 9 décembre 2000
Statut
Membre
Dernière intervention
20 octobre 2008

Bonjour tout le monde,

Je reviens sur ce message pour GENTLEMAN333.
Je te propose ce bout de code pour tester les graphiques. c'est juste un prémisse histoire d'essayer.
Tu crées une nouvelle classe nommée Main.class, tu copies ce qui est ci-dessous et tu compiles.
ça devrait marcher.
+-+-+-+-+-+-+-+-+-+-+-+-+-
import java.awt.Dimension;

import javax.swing.JFrame;

public class Main {

public static void main(String[] args){
Graph essai;
JFrame popup;
Object[][] val={{2,2,2},{3,3,1},{2,2,1}}; //(met la meme valeur pour la 1ère valeure {_,.,.}. La 2° valeur correspond à la hauteur {.,_,.}
Object[] val2={1,1,1}; // pas tout à fait compris à quoi ça servait, mais si tu trouves, fais le moi savoir.
Object[][] ladder={{2,3},{2,3}}; // même chose qu'au dessus.
popup = new JFrame();

essai = new Graph();
essai.setSize(400,400);
essai.setValues(val);
essai.setValues(val2);
essai.setLadder(ladder);
essai.setType(Essai.VALUES_AND_STRING);

popup.setSize(new Dimension(400,400));
popup.add(essai);
popup.setVisible(true);
}
}
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

C'est pas très propre, mais ça pourra t'aider à démarrer. Si tu as des informations sur l'utilité de VALUES et _VALUES, met les ici, ça pourra aider d'autres personnes ;)

°°-
Messages postés
2
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
30 juin 2008

Bonjour à tous, je suis débutant aussi...et je voudrais utiliser cette classe pour pouvoir afficher un histogramme sur ma page jsp.
J'ai copié le contenu de la classe, j'y ai porté des modifications comme l'a mentionné "DRAKSS", mais le problème c'est que je ne sais pas comment pouvoir l'exploiter ou plutôt comment je ferais pour y mettre mes paramètres (les chiffres que je veux voir en graphe)...

Je vous remercie d'avance !
Messages postés
1
Date d'inscription
lundi 10 mars 2008
Statut
Membre
Dernière intervention
28 avril 2008

trés bien
Mercie
Messages postés
136
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
12 septembre 2013
2
Salut ,
merci pour tes remarques , je vais les ajouter le plus vite possible
Messages postés
9
Date d'inscription
samedi 9 décembre 2000
Statut
Membre
Dernière intervention
20 octobre 2008

Il n'y a pas de fonction Edit de nos commentaires ?
[je voulais editer le MUAD-DIB en TLALOCTZIN]
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.