2017-06-14 3 views
0

Ceci est ma classe de contrôleur java où tracer le graphique linéaire avec plusieurs séries et plusieurs valeurs dynamiquement axe X-catégorie et Y est l'axe des nombres et je veux montrer les valeurs tout en planant sur les points. Comment puis-je faire comme je l'ai plusieurs séries et plusieurs valeursComment puis-je afficher la valeur en planant sur les points du graphique en ligne dans javafx?

Stage stage = new Stage(); 

stage.setTitle("Performance Analysis"); 

final CategoryAxis xAxis = new CategoryAxis(); 
    final NumberAxis yAxis = new NumberAxis(); 

    xAxis.setLabel("Values"); 
    //yAxis.setLabel("Engines"); 

    LineChart<String, Number> lineChart = new LineChart<String,Number>(xAxis,yAxis); 

    Scene scene = new Scene(lineChart,800,600); 

    lineChart.setTitle("Performance Analysis"); 

    lineChart.setCursor(Cursor.CROSSHAIR); 

    ParameterSelectionController psc = new ParameterSelectionController(); 


    performance performvalues = new performance(lineChart, refined, collection, al4); //this is another class which in parameter 

    performvalues.generateChart(); 

    stage.setScene(scene); 
    stage.show(); 
+0

https://stackoverflow.com/questions/14615590/javafx-linechart-hover-values ​​ – Sedrick

+0

S'il vous plaît poster plus de code! –

Répondre

0

J'ai vu votre précédente question et au sujet de ce que j'ai post ci-dessous réponse.

En même que this exemple, vous pouvez créer un objet chart.XYChart.Data et en utilisant constructeur de la classe HoveredThresholdNodea pour définir un nœud point particulier comme cette façon

Modifier la méthode generateChart() et de créer la classe HoveredThresholdNodea dans la performance. classe java comme:

@SuppressWarnings({ "unchecked", "rawtypes" }) 
public void generateChart() { 
    for (int i = 0; i < engines.size(); i++) { 
     XYChart.Series series = new XYChart.Series(); 
     series.setName(engines.get(i).toString()); 
     for (int j = 0; j < parameters.size(); j++) { 
      final Data<String, Object> data = new XYChart.Data<>(parameters.get(j).toString(), param.get(i).get(j)); 
      data.setNode(new HoveredThresholdNodea(engines.get(i).toString(), param.get(i).get(j))); 
      series.getData().add(data); 
     } 
     lineChart.getData().add(series); 
     System.out.println(lineChart); 
    } 
} 

class HoveredThresholdNodea extends StackPane { 

    public HoveredThresholdNodea(String string, Object object) { 
     setPrefSize(15, 15); 

     final Label label = createDataThresholdLabel(string, object); 

     setOnMouseEntered(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent mouseEvent) { 
       getChildren().setAll(label); 
       setCursor(Cursor.NONE); 
       toFront(); 
      } 
     }); 
     setOnMouseExited(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent mouseEvent) { 
       getChildren().clear(); 
      } 
     }); 
    } 

    private Label createDataThresholdLabel(String string, Object object) { 
     final Label label = new Label(object + ""); 
     label.getStyleClass().addAll("default-color0", "chart-line-symbol", "chart-series-line"); 
     label.setStyle("-fx-font-size: 20; -fx-font-weight: bold;"); 

     System.out.println(string); 
     if (string.equals("engine1")) { 
      label.setTextFill(Color.RED); 
      label.setStyle("-fx-border-color: RED;"); 
     } else if (string.equals("engine2")) { 
      label.setTextFill(Color.ORANGE); 
      label.setStyle("-fx-border-color: ORANGE;"); 
     } else { 
      label.setTextFill(Color.GREEN); 
      label.setStyle("-fx-border-color: GREEN;"); 
     } 

     label.setMinSize(Label.USE_PREF_SIZE, Label.USE_PREF_SIZE); 
     return label; 
    } 
} 

sortie de ce code est:

enter image description here