2017-06-14 58 views
0

這是我的控制器java類,其中繪製了具有多個系列和多個值的折線圖動態X類軸和Y是數軸,並且我想顯示懸停在點上的值。我怎樣才能做到這一點,因爲我有多個系列和多個值如何在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

請發表更多代碼! –

回答

0

我已經看到你以前的question並對此,我有以下後回答。

在相同this例如,您可以創建chart.XYChart.Data對象並使用HoveredThresholdNodea類的構造函數來設置特定點節點像這樣

更改generateChart()方法,並在性能方面創造出HoveredThresholdNodea類。 java類如:

@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; 
    } 
} 

輸出這個代碼是:

enter image description here

相關問題