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

JavaFX Discussion :

ScatterChart à partir d'un tableau de données extérieures


Sujet :

JavaFX

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Par défaut ScatterChart à partir d'un tableau de données extérieures
    Bonjour à tous, après avoir pas mal bossé en swing, je débute en javaFX et voudrais représenter des points dans un graphique (je bosse sous netbeans, sur windows)..

    Pour cela, j'ai réalisé un ScatterChart, voici le code que j'ai utilisé :

    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
    import javafx.application.Application;
    import javafx.scene.Group;
    import javafx.scene.Scene;
    import javafx.stage.Stage;
    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;
    import javafx.scene.chart.ScatterChart;
    import javafx.scene.chart.XYChart;
    import javafx.scene.chart.NumberAxis;
    import javafx.scene.paint.Color;
    import javafx.scene.shape.Circle;
     
     
    public class Testt extends Application {
     
        @Override public void start(Stage stage){
            Group root = new Group();
            stage.setTitle("Scatter Chart Sample");
            NumberAxis xAxis = new NumberAxis("X-Axis", -1d, 1d, 1.0d);
            NumberAxis yAxis = new NumberAxis("Y-Axis", -1d, 1d, 1.0d);       
            final ScatterChart<Number,Number> sc = new
                ScatterChart<Number,Number>(xAxis,yAxis);
            xAxis.setLabel("Age (years)");                
            yAxis.setLabel("Returns to date");
            sc.setTitle("Investment Overview");
     
            XYChart.Series series1 = new XYChart.Series();
            series1.setName("Equities");
            for(int i=0;i<10;i++){
                series1.getData().add(new XYChart.Data((double) i/10, (double) i/10));
            }
     
     
            sc.getData().addAll(series1);
            sc.setPrefSize(575.0,632.0);
     
            Circle circle2 = new Circle(310,297,250);
            circle2.setStroke(Color.DODGERBLUE);
            circle2.setFill(null);     
     
            //chart.getPlotChildren().add(circle2);
            root.getChildren().add(sc);
            root.getChildren().add(new Group(circle2));
     
            Scene scene = new Scene(root, 600, 600);
            stage.setScene(scene);
            stage.show();
        }
     
        public static void main(String[] args) {
            launch(args);
        }
    }
    Mon soucis c'est que la je crée quelques "à la main" grâce à ma boucle for, alors que je souhaiterais passer un tableau à deux colonnes (qui contient les coordonnées en x et en y) en paramètre d'une fonction, j'ai essayé de le mettre en paramètre sur la méthode Start, mais ça n'a pas l'air de fonctionner ...

    si vous avez une idée, je vous remercie

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 61
    Par défaut
    Je me demande si tu cherches quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static void main(String[] args)
    {
    	ArrayList<String> lstData = new ArrayList<>(); // jre 7 allows that
    	for (int i = 0; i < 10; i++)
    	{
    		String d = Double.valueOf((double) i / 10).toString();
    		lstData.add(d);
    		lstData.add(d);
    	}
     
    	launch(lstData.toArray(new String[0]));
    }
    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
    @Override
    public void start(Stage stage)
    {
    	List<String> lstData =  getParameters().getUnnamed();
     
    	// ...
     
            Series<Number, Number> series1 = new Series<>();
    	series1.setName("Equities");
     
    	for (int i = 0; i < lstData.size(); i+=2)
    	{
    		Double dX = Double.parseDouble(lstData.get(i));
    		Double dY = Double.parseDouble(lstData.get(i + 1));
    		series1.getData().add(new Data<Number, Number>(dX, dY));
    	}
     
    	sc.getData().addAll(Arrays.asList(series1));
     
    	// ...
    }
    Tu peux récupérer et traiter les paramètres dans la méthode init() de la classe Application aussi. Il ne semble pas possible de passer en paramètre de application.launch() autre chose qu'un tableau de String hélas.

  3. #3
    Membre très actif
    Avatar de la.lune
    Homme Profil pro
    Directeur Technique
    Inscrit en
    Décembre 2010
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Comores

    Informations professionnelles :
    Activité : Directeur Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 548
    Par défaut
    Mais si j'au peu compris d'une part c'est qu'il veut juste faire une fonction qui attend un paramètre de tableau de deux clones, l’entrée n'est pas forcement les arguments de l'application , possible une interface, au une méthode d'autre classe je ne sais pas quoi. Alors il y a plusieurs méthodes, tu n'est pas obligé de mettre tout dans la fonction start, tu peux créer des fonction a part et faire par exemple ton Group root comme un attribut dans la classe et tu l'initialise dans la méthode qui attend comme argument le tableau de clones, et appel cette méthode avec les argument et s'assurer qu'il sera appeler après dans ton start avant d'initialiser la scène avec ce groupe root. Ou faire une méthode qui retourne un objet Group qui va initialiser la scène et cette méthode aura comme arguments ton tableau de donné
    Tu peut même créer une classe à part dans un autre fichier si tu veux avec le constructeur et une méthode avec les arguments dont tu as besoin et qui va retourner un noeud(Group, Pane...) qui constitue l'arborescente de ce qui est à présenter et tu l'initialise dans ton start ou dans le coprs d'une fonction qui répond à un évènement.. tu appel cette méthode qui retourne ce noeud et tu l'insère dans le groupe root . Je pense que c'est claire si je ne me trompe pas sur ta question sinon si tu veux je peux te donner du code exemple mais il faut te prononcer après ces deux réponses pour être claire.

Discussions similaires

  1. [XL-2000] Exporter des valeurs à partir d'un tableau de données
    Par thibault73 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 15/03/2015, 19h04
  2. Réponses: 3
    Dernier message: 25/03/2011, 22h54
  3. tracer des courbes à partir d'un tableau de données
    Par Erlen dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 6
    Dernier message: 28/11/2008, 18h08
  4. Réponses: 3
    Dernier message: 20/01/2008, 18h18
  5. [SAX] Génére un fichier XML avec SAX à partir d'un tableau de données
    Par flethiel dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 25/09/2007, 12h12

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