Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GRAPHIQUE EN BÂTON


Information sur la source



Description

Cliquez pour voir la capture en taille normale
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

  • /*
  • * @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 ;
  • }
  • }
/*
 * @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 ;
    }
}

Commentaires et avis

signaler à un administrateur
Commentaire de muad-dib le 15/04/2008 23:12:40

Pour info il existe JFreeChart (gratuit).

signaler à un administrateur
Commentaire de tlaloctzin le 16/04/2008 00:12:53

Je sait mais en l'occurence j'ai fais ca dans le cadre de mon taf ,avec une interaction MySql , ca m'arrangeait plus de fonctionner de cette maniere .

signaler à un administrateur
Commentaire de drakss le 24/04/2008 10:25:09

Salut à toi MUAD-DIB,
+-+-+-+-+-+-+-+-+-+-+
J'ai testé ton code, et j'aurai quelques remarques à faire:
++
Tu devrais commenter tes "Setters" et tes variables (values et _values... ça donne pas vraiment idée de ce que ça représente). Autant dire que j'ai galéré un petit moment avant d'arriver à quelque chose de visuellement acceptable.
++
Hormis les commentaires, le reste n'est pas mal du tout, à ce que j'en dis. Le seul autre truc qui me gène c'est le type OBJECT utilisé pour stocker les valeurs. Certe ça laisse des libertés, mais je pense qu'utiliser "float" aurait été plus judicieux.

Bon après, je ne suis pas expert en programmation, mais je te donne juste le détail de ce qui m'a géné au premier abord.

Bonne continuation

signaler à un administrateur
Commentaire de drakss le 24/04/2008 11:25:19

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

signaler à un administrateur
Commentaire de tlaloctzin le 24/04/2008 19:10:48

Salut ,
merci pour tes remarques , je vais les ajouter le plus vite possible

signaler à un administrateur
Commentaire de malesselma le 28/04/2008 18:00:47

trés bien
Mercie

signaler à un administrateur
Commentaire de gentleman333 le 30/06/2008 13:39:25

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 !

signaler à un administrateur
Commentaire de drakss le 17/07/2008 10:20:10

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 ;)

°°-

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

JAVA2D et ECRAN TACTILE [ par MICHELGERARD ] Je developpe une application graphique destinée à servir de "croquis" dans les relevés topographiques et donc à fonctionner sur des tablettes graphiqu Mon graphique s'efface dès qu'une fenetre passe dessus!! [ par joshua91 ] Salut &#224; tous. Comment faire pour qu'un graphique (m&#233;thode paint()) d'un Canvas soit persistant?? Mon nuage de point est comme gomm&#233; d& affichage d'un Graphics [ par julienlll ] je suis en train de faire un visualiseur de courbes.J'ai crée une interface et dans un de ses cadres, j'y ai mis un objet Panneau_Graphique qui extend raffraichissement d'objet graphique sur un panel [ par MrNo ] J'ai un probleme de rafraichisement sur une applet java aprés une action je veux redessiner des objets sous paint mais il reste des residus de ce qui Comment dessiner un graphique avec des valeurs d'un tableau? [ par afura2004 ] Salut, J'aimerais savoir comment je peux faire pour dessiner un graphique avec des valeurs déjà existant dans un graphique. J'ai déjà dessiné un plan refresh java2D [ par Twinuts ] Bonjour a tous :) ,Est il possible de repeindre une applet ou une application java2D contenant des polygones en évitant le massacre de repaint(); et vi en java sans interface graphique [ par jules8491 ] salut,je recherche un editeur de texte du style vi mais developpe en java et sans interface graphique, en gros les seuls classes dont j'ai acces sont interface graphique java [ par Syl20estbon ] Bonjour,Voila j'ai un double probleme:en fait je voudrais récuperer un evenement souris donc a l'interieur de la classe qui fait le dessin j'ai mis un classe graphique [ par carhartt62 ] Bonjour, Etant novice en java, je vous demande de l'aide :Mon projet de fin d'année est bassé sur une applet java qui doit envoyer et revevoir des inf Méthode paint [ par deltiti ] Je réalise actuellement un prog de simulation de cours de change en java pour mon mémoire. Mais je rencontre un petit problème...En effet j'utilise to


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,374 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.