From: <emm...@us...> - 2008-09-25 13:34:26
|
Revision: 3979 http://fudaa.svn.sourceforge.net/fudaa/?rev=3979&view=rev Author: emmanuel_martin Date: 2008-09-25 13:34:19 +0000 (Thu, 25 Sep 2008) Log Message: ----------- exemple d'utilisation du package courbe. Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/test/org/fudaa/ebli/all/TestGrapheSimple.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/test/org/fudaa/ebli/all/TestGrapheTree.java Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/test/org/fudaa/ebli/all/TestGrapheSimple.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/test/org/fudaa/ebli/all/TestGrapheSimple.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/test/org/fudaa/ebli/all/TestGrapheSimple.java 2008-09-25 13:34:19 UTC (rev 3979) @@ -0,0 +1,164 @@ +/* + * @creation 25 sept. 2008 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.ebli.all; + +import java.awt.Color; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.GridLayout; + +import javax.swing.JFrame; + +import org.fudaa.ctulu.iterator.LogarithmicNumberIterator; +import org.fudaa.ebli.commun.EbliActionInterface; +import org.fudaa.ebli.commun.EbliComponentFactory; +import org.fudaa.ebli.courbe.EGAxeHorizontal; +import org.fudaa.ebli.courbe.EGAxeVertical; +import org.fudaa.ebli.courbe.EGCourbeModelDefault; +import org.fudaa.ebli.courbe.EGCourbeSimple; +import org.fudaa.ebli.courbe.EGFillePanel; +import org.fudaa.ebli.courbe.EGGraphe; +import org.fudaa.ebli.courbe.EGGrapheSimpleModel; +import org.fudaa.ebli.trace.TraceLigne; +import org.fudaa.ebli.trace.TraceLigneModel; + +import com.memoire.bu.BuBorderLayout; +import com.memoire.bu.BuPanel; + +/** + * Tutorial sur la cr\xE9ation de graphe avec une seule courbe. + * + * L'objectif de ce code est d'afficher une fen\xEAtre avec en son centre une + * zone avec un rep\xE8re (axe x et y) et une s\xE9rie d'action disponible sous + * forme de boutons \xE0 gauche du graphe. + * Un diagramme de classe simplifi\xE9 du package src:org.fudaa.ebli.courbe est + * disponible dans le package test:org.fudaa.ebli.all + * + * Ce tutorial en accompagne un autre permettant de r\xE9aliser un graphe + * avec plusieurs courbes. + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class TestGrapheSimple { + + private TestGrapheSimple(){} + + public static void main(final String[] _args) { + // Graphe model et graphe vue \\ + /* + * Chaque notion est d\xE9compos\xE9 en deux formes : le model et la vue. + * Ainsi le graphe (le conteneur g\xE9rant l'affichage des courbes dans + * le rep\xE8re) est d\xE9compos\xE9 en graphe model et graphe vue. + * Nous ne voulons afficher qu'une courbe. Le model choisi pour le + * graphe est donc EGGrapheSimpleModel. + * Il existe plusieurs model de graphe (notamment EGGrapheSimpleModel) + * chacun implementant l'interface EGGrapheModel. + */ + EGGrapheSimpleModel grapheModel = new EGGrapheSimpleModel(); + /* + * La vue choisie pour ce model se nomme EGGraphe. Il n'y en a qu'une + * quelque soit le model de graphe choisi. + */ + EGGraphe grapheVue = new EGGraphe(grapheModel); + + // Axe x et axe y\\ + /* + * Pour afficher les courbes, notre graphe vue a besoin d'un rep\xE8re + * (axe x et axe y). La premi\xE8re difficult\xE9e est ici. + * Les deux axes ne sont pas r\xE9f\xE9renc\xE9 au m\xEAme endroit. L'axe des x + * est poss\xE9d\xE9 par le graphe vue, et donc est commun \xE0 l'ensemble des + * courbes. L'axe des y est poss\xE9d\xE9 par la vue de la courbe. Dans + * notre cas cette distinction n'a pas d'int\xE9ret. Dans le cas de + * l'affichage de plusieurs courbe, cette architecture est utile. + */ + EGAxeHorizontal axeX = new EGAxeHorizontal(false); + axeX.setTitre("temps"); + axeX.setUnite("sec"); + axeX.setBounds(0.0001, 1000000); // Minimum et maximum de l'axe + /* + * L'instruction suivante permet de choisir le type de graduation + * de l'axe (lin\xE9aire, logarithmique, etc...). Si cette fonction + * n'est pas appel\xE9e, le type par defaut est lin\xE9aire. + */ + axeX.setAxisIterator(new LogarithmicNumberIterator()); + axeX.setGraduations(true); + grapheVue.setXAxe(axeX); + /* + * Nous cr\xE9ons l'axe des y, mais l'utilisons lors de la cr\xE9ation de la courbe vue. + * L'axe des y poss\xE8de les m\xEAmes propri\xE9t\xE9s que l'axe des x. + */ + EGAxeVertical axeY = new EGAxeVertical(); + axeY.setGraduations(true); + /* + * La grille permet de dessiner des lignes horizontales (d\xE9crites par + * TraceLigneModel).Dans le cas o\xF9 c'est utilis\xE9 par l'axe des x, ces lignes + * seront verticales formant ainsi une grille compl\xE8te. + */ + axeY.setGrille(new TraceLigneModel(TraceLigne.LISSE, 1, Color.LIGHT_GRAY)); + axeY.setAxisIterator(new LogarithmicNumberIterator()); + axeY.setBounds(0.0001, 10000); + axeY.setLineColor(Color.blue); + axeY.setTitre("Axe Y 1"); + + // Courbe \\ + /* + * Courbe : + * Comme pour le graphe, les courbes sont divis\xE9es en courbe model et + * courbe vue. + * Les deux tableaux de doubles pass\xE9s en param\xE8tres du model sont les + * coordonn\xE9es x et les coordonn\xE9es y de la courbe. + */ + EGCourbeModelDefault courbeModel=new EGCourbeModelDefault(new double[]{0.0001, 3, 4, 1000000}, new double[]{10000, 4, 5, 3}); + EGCourbeSimple courbeVue = new EGCourbeSimple(axeY, courbeModel); + courbeVue.setAspectContour(Color.cyan); + grapheModel.addCourbe(courbeVue, null); + + // EGFillePanel et boutons \\ + /* + * EGFillePanel est le 'manager' qui contient le graphe vue. Il permet + * de g\xE9n\xE9rer des boutons pour interagir avec le graphe. Cette g\xE9n\xE9ration + * peut prendre plusieurs forme, ici nous utiliserons la fonction + * getSpecificActions qui retourne une s\xE9rie d'action permettant de + * cr\xE9er les boutons \xE0 ajouter \xE0 l'interface. + * Une autre utilisation de ces boutons est faite + * dans le tutorial TestGrapheTree. + */ + EGFillePanel egPanel = new EGFillePanel(grapheVue); + // Construction des boutons + EbliActionInterface[] actions = egPanel.getSpecificActions(); + Container containerBoutons = new Container(); + containerBoutons.setLayout(new GridLayout(12, 1)); + // Pour chaque action, on g\xE9n\xE8re un bouton correspondant + for (int i=0; i<actions.length; i++) { + if(actions[i] != null) // Certaines actions sont null pour indiquer un groupe diff\xE9rent d'action ; inutilis\xE9 ici + // Ajout du bouton correspondant \xE0 l'action dans le container + containerBoutons.add(actions[i].buildButton(EbliComponentFactory.INSTANCE)); + } + + // Construction de la fen\xEAtre \\ + JFrame frame = new JFrame(); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + BuPanel panel = new BuPanel(); + panel.setLayout(new BuBorderLayout()); + panel.add(egPanel, BuBorderLayout.CENTER); + panel.add(containerBoutons, BuBorderLayout.WEST); + + grapheVue.setPreferredSize(new Dimension(500, 500)); + grapheVue.setSize(grapheVue.getPreferredSize()); + + frame.add(panel); + frame.pack(); + frame.setVisible(true); + /* + * Il est n\xE9c\xE9ssaire de redimmensionner la fen\xEAtre pour que les + * courbes se dessines. + */ + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/test/org/fudaa/ebli/all/TestGrapheSimple.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/test/org/fudaa/ebli/all/TestGrapheTree.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/test/org/fudaa/ebli/all/TestGrapheTree.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/test/org/fudaa/ebli/all/TestGrapheTree.java 2008-09-25 13:34:19 UTC (rev 3979) @@ -0,0 +1,225 @@ +/* + * @creation 25 sept. 2008 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.ebli.all; + +import java.awt.Color; +import java.awt.Dimension; + +import javax.swing.JFrame; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JTree; + +import org.fudaa.ctulu.iterator.LogarithmicNumberIterator; +import org.fudaa.ebli.courbe.EGAxeHorizontal; +import org.fudaa.ebli.courbe.EGAxeVertical; +import org.fudaa.ebli.courbe.EGCourbeChild; +import org.fudaa.ebli.courbe.EGCourbeModelDefault; +import org.fudaa.ebli.courbe.EGFillePanel; +import org.fudaa.ebli.courbe.EGGraphe; +import org.fudaa.ebli.courbe.EGGrapheTreeModel; +import org.fudaa.ebli.courbe.EGGroup; +import org.fudaa.ebli.trace.TraceLigne; +import org.fudaa.ebli.trace.TraceLigneModel; + +import com.memoire.bu.BuBorderLayout; +import com.memoire.bu.BuPanel; +import com.memoire.bu.BuScrollPane; + +/** + * Tutorial sur la cr\xE9ation de graphe avec un arbre de courbe. + * + * L'objectif de ce code est d'afficher une fen\xEAtre avec en son centre une + * zone avec un rep\xE8re (axe x et y) et une ou plusieurs courbes affich\xE9es, + * dans un menu une s\xE9rie d'action r\xE9alisables sur le graphe et les courbes, + * et enfin \xE0 la droite une s\xE9rie de courbes repr\xE9sent\xE9es sous forme d'arbre + * permettant de choisir la courbe selectionn\xE9e. + * Un diagramme de classe simplifi\xE9 du package src:org.fudaa.ebli.courbe est + * disponible dans le package test:org.fudaa.ebli.all + * + * Ce tutorial en accompagne un autre permettant de r\xE9aliser un graphe + * simple. C'est \xE0 dire ne poss\xE9dant qu'une seule courbe, sans notion + * d'arbre de courbe. + * + * Ce tutorial reprend quasi int\xE9gralement le code fourni par Fred Deniger + * dans TestGraphe2.java + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class TestGrapheTree { + + private TestGrapheTree(){} + + public static void main(final String[] _args) { + // Graphe model et graphe vue \\ + /* + * Chaque notion est d\xE9compos\xE9 en deux formes : le model et la vue. + * Ainsi le graphe (le conteneur g\xE9rant l'affichage des courbes dans + * le rep\xE8re) est d\xE9compos\xE9 en graphe model et graphe vue. + * Nous voulons pouvoir afficher plusieurs courbes. Le model choisi + * pour le graphe est donc EGGrapheTreeModel. + * Il existe plusieurs model de graphe (notamment EGGrapheSimpleModel) + * chacun implementant l'interface EGGrapheModel. + */ + EGGrapheTreeModel grapheModel = new EGGrapheTreeModel(); + /* + * La vue choisie pour ce model se nomme EGGraphe. Il n'y en a qu'une + * quelque soit le model de graphe choisi. + */ + EGGraphe grapheVue = new EGGraphe(grapheModel); + + // Axe x \\ + /* + * Pour afficher les courbes, notre graphe vue a besoin d'un rep\xE8re + * (axe x et axe y). La premi\xE8re difficult\xE9e est ici. + * Les deux axes ne sont pas r\xE9f\xE9renc\xE9 au m\xEAme endroit. L'axe des x + * est poss\xE9d\xE9 par le graphe vue, et donc est commun \xE0 l'ensemble des + * courbes. L'axe des y est poss\xE9d\xE9 par un groupe de courbe de l'arbre. + * Ainsi il n'y aura qu'un seul axe des x sur le rep\xE8re, mais plusieurs + * axes des y (un pour chaque groupe). + */ + EGAxeHorizontal axeX = new EGAxeHorizontal(false); + axeX.setTitre("temps"); + axeX.setUnite("sec"); + axeX.setBounds(0.0001, 1000000); // Minimum et maximum de l'axe + /* + * L'instruction suivante permet de choisir le type de graduation + * de l'axe (lin\xE9aire, logarithmique, etc...). Si cette fonction + * n'est pas appel\xE9e, le type par defaut est lin\xE9aire. + */ + axeX.setAxisIterator(new LogarithmicNumberIterator()); + axeX.setGraduations(true); + grapheVue.setXAxe(axeX); + + // Groupes, courbes et axe y \\ + /* + * Cr\xE9ation d'un des deux groupes de courbes que nous allons placer dans + * l'arbre. Ces groupes poss\xE8dent une s\xE9rie de courbes, un axe y et un + * titre. + */ + EGGroup groupe = new EGGroup(); + groupe.setTitle("groupe 1"); + /* + * Courbe : + * Comme pour le graphe, les courbes sont divis\xE9es en courbe model et + * courbe vue. + * Les deux tableaux de doubles pass\xE9s en param\xE8tres du model sont les + * coordonn\xE9es x et les coordonn\xE9es y de la courbe. Le titre d'un + * model correspond au nom qui sera affich\xE9 dans l'arbre pour cette + * courbe. + * La vue utilis\xE9e ici est sp\xE9cialement cr\xE9e pour pouvoir + * s'int\xE9grer au groupe auquel elle apartient. + */ + // Premi\xE8re courbe de ce groupe + EGCourbeModelDefault courbeModel=new EGCourbeModelDefault(new double[]{0.0001, 3, 4, 1000000}, new double[]{10000, 4, 5, 3}); + courbeModel.setTitle("Coubre bleue"); + EGCourbeChild courbeVue = new EGCourbeChild(groupe); + courbeVue.setModel(courbeModel); + courbeVue.setAspectContour(Color.cyan); + groupe.addEGComponent(courbeVue); + // Seconde courbe de ce groupe + courbeModel = new EGCourbeModelDefault(new double[] { 0.0002, 5, 7, 900000 }, new double[] { 0.001, 1, 3, 4 }); + courbeModel.setTitle("Courbe rouge"); + courbeVue = new EGCourbeChild(groupe); + courbeVue.setAspectContour(Color.RED); + courbeVue.setModel(courbeModel); + groupe.addEGComponent(courbeVue); + /* + * L'axe des y poss\xE8de les m\xEAmes propri\xE9t\xE9s que l'axe des x. + */ + EGAxeVertical axeY = new EGAxeVertical(); + axeY.setGraduations(true); + /* + * La grille permet de dessiner des lignes horizontales (d\xE9crites par + * TraceLigneModel).Dans le cas o\xF9 c'est utilis\xE9 par l'axe des x, ces lignes + * seront verticales formant ainsi une grille compl\xE8te. + */ + axeY.setGrille(new TraceLigneModel(TraceLigne.LISSE, 1, Color.LIGHT_GRAY)); + axeY.setAxisIterator(new LogarithmicNumberIterator()); + axeY.setBounds(0.0001, 10000); + axeY.setLineColor(Color.blue); + axeY.setTitre("Axe Y 1"); + groupe.setAxeY(axeY); + grapheModel.add(groupe); + // Construction du second groupe + groupe = new EGGroup(); + groupe.setTitle("groupe 2"); + // Premi\xE8re courbe de ce second groupe + courbeModel = new EGCourbeModelDefault(new double[] { 1, 8, 9, 10 }, new double[] { 10, 4, 2, 24 }); + courbeModel.setTitle("Courbe jaune"); + courbeVue = new EGCourbeChild(groupe); + courbeVue.setAspectContour(Color.yellow); + courbeVue.setModel(courbeModel); + groupe.addEGComponent(courbeVue); + // Seconde courbe de ce second groupe + courbeModel = new EGCourbeModelDefault(new double[] { 1, 3, 4, 5 }, new double[] { 14, 54, 25, 43 }); + courbeModel.setTitle("Courbe vert"); + courbeVue = new EGCourbeChild(groupe); + courbeVue.setAspectContour(Color.green); + courbeVue.setModel(courbeModel); + groupe.addEGComponent(courbeVue); + // Axe des y de ce second groupe + axeY = new EGAxeVertical(); + axeY.setDroite(true); // Emplacement de l'axe \xE0 droite du graphe. + axeY.setGraduations(true); + axeY.setBounds(0, 55); + axeY.setTitre("Axe Y 2"); + groupe.setAxeY(axeY); + grapheModel.add(groupe); + + // La vue de l'arbre \\ + /* + * C'est le graphe model qui contient les groupes. On peut donc le + * consid\xE9rer \xE9galement comme le model de l'arbre. + * Donc la vue de l'abre (ici un simple JTree) viendra utilise le + * graphe model. + */ + JTree arbreVue = new JTree(grapheModel); + arbreVue.setSelectionModel(grapheModel.getSelectionModel()); + arbreVue.setRootVisible(false); + + // EGFillePanel et menu\\ + /* + * EGFillePanel est le 'manager' qui contient le graphe vue. Il permet + * de g\xE9n\xE9rer des boutons pour interagir avec le graphe. Cette g\xE9n\xE9ration + * peut prendre plusieurs forme, ici nous utiliserons la fonction + * fillSpecificMenu qui rempli le menu pass\xE9 en param\xE8tre de tout les + * boutons n\xE9c\xE9ssaires. Une autre utilisation de ces boutons est faite + * dans le tutorial TestGrapheSimple. + */ + EGFillePanel egPanel = new EGFillePanel(grapheVue); + JMenu menu = new JMenu(); + menu.setName("Nom menu"); + menu.setText("Texte menu"); + egPanel.fillSpecificMenu(menu); + JMenuBar menuBarre = new JMenuBar(); + menuBarre.add(menu); + + // Construction de la fen\xEAtre \\ + JFrame frame = new JFrame(); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setJMenuBar(menuBarre); + + BuPanel panel = new BuPanel(); + panel.setLayout(new BuBorderLayout()); + panel.add(egPanel, BuBorderLayout.CENTER); + panel.add(new BuScrollPane(arbreVue), BuBorderLayout.EAST); + + grapheVue.setPreferredSize(new Dimension(200, 300)); + grapheVue.setSize(grapheVue.getPreferredSize()); + + frame.getContentPane().add(panel); + frame.pack(); + frame.setVisible(true); + /* + * Il est n\xE9c\xE9ssaire de redimmensionner la fen\xEAtre pour que les + * courbes se dessines. + */ + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/test/org/fudaa/ebli/all/TestGrapheTree.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |