2016-11-11 6 views
3

Ich schreibe ein Testprogramm, wo Sie über 70% erhalten müssen, um den Test zu bestehen. Ich habe ein LineChart und eine Reihe eingerichtet, die den Prozentwert und das Datum als Koordinaten nimmt. Ich möchte die Knoten färben, die> = 70% grün und den Rest rot sind. Hier ist ein Codefragment:Stil für einen bestimmten Knoten in einer Serie festlegen - JavaFX

for(final XYChart.Data<String, Number> data : series.getData()){ 
     System.out.println(data.getXValue()); 
     if(percent>=70){ 
      data.getNode().setStyle("-fx-background-color: green;"); 
     }else{ 
      data.getNode().setStyle("-fx-background-color: red;"); 
     } 
     data.getNode().addEventHandler(MouseEvent.MOUSE_MOVED, new EventHandler<MouseEvent>() { 


      @Override 
      public void handle(MouseEvent event) { 
       // TODO Auto-generated method stub 
       data.getNode().setCursor(Cursor.HAND); 

       Tooltip.install(data.getNode(), new Tooltip("Am: \n"+data.getXValue()+"\nZu: "+data.getYValue()+"%")); 
      } 
     }); 
    } 

Das Problem ist, dass ich nicht in der Lage bin, einen bestimmten Knoten in einer Reihe zu färben. Ich hoffe, dass jemand mir helfen kann.

+0

Css ist der beste Weg, dies zu tun. Benutzt du Scenebuilder? – Sedrick

+0

Ich bin neugierig, ob dein Tooltip mit der Maus funktioniert? Wenn nicht schauen, was ich hier gemacht habe. http://stackoverflow.com/questions/14615590/javafx-linechart-hover-values/40431880#40431880 – Sedrick

Antwort

1

Sie müssen mit so etwas beginnen.

//If you only have one series all you need is this first block of code 
Set<Node> node = lineChart.lookupAll(".default-color0.chart-line-symbol.series0.");      
    node.forEach((element) -> { 
     //do somthing to each node in series0 
     System.out.println(element.toString());//don't know if this will work. If it does it will all you to see each node. At the very least the node address. 
}); 

//If you have two series you need this. If you have more thant two series you need to copy this and change node2 to node3 everywhere in your copy. 
Set<Node> node2 = lineChart.lookupAll(".default-color1.chart-line-symbol.series1.");      
    node2.forEach((element) -> { 
     //do somthing to each node in series1 
     System.out.println(element.toString());//don't know if this will work. If it does it will all you to see each node. At the very least the node address. 
}); 
Verwandte Themen