2013-03-06 22 views
5

von diesem Code anzuzeigen i Balkendiagramm von 10 bar erzeugen kann jetzt will ich wissen, wie wie der beigefügten Bildwert der einzelnen Balken oben auf Leiste anzuzeigen: enter image description herewie Bar-Wert auf der Bar javafx

Hier ist Code:

public class BarChartSample extends Application { 


    @Override public void start(Stage stage) { 
     stage.setTitle("Bar Chart Sample"); 
     final CategoryAxis xAxis = new CategoryAxis(); 
     final NumberAxis yAxis = new NumberAxis(); 
     final BarChart<String,Number> bc = 
      new BarChart<String,Number>(xAxis,yAxis); 
     bc.setTitle("Country Summary"); 
     xAxis.setLabel("bars");  
     yAxis.setLabel("Value"); 

     XYChart.Series series1 = new XYChart.Series(); 
     series1.setName("...");  

for(int i=0;i<10;i++) 
{ 
    //here i want to change color of bar if value of i is >5 than red if i>8 than blue 
series1.getData().add(new XYChart.Data("Value", i)); 

}   

} 

public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

relevant http://stackoverflow.com/a/41494789/4469105 – r3r57

Antwort

14

Innerhalb eines ChangeListener für die jeweils node Eigenschaft des Datenelements, können Sie die folgende Funktion aufrufen, ein Etikett an die Spitze der Stange hinzuzufügen:

private void displayLabelForData(XYChart.Data<String, Number> data) { 
    final Node node = data.getNode(); 
    final Text dataText = new Text(data.getYValue() + ""); 
    node.parentProperty().addListener(new ChangeListener<Parent>() { 
    @Override public void changed(ObservableValue<? extends Parent> ov, Parent oldParent, Parent parent) { 
     Group parentGroup = (Group) parent; 
     parentGroup.getChildren().add(dataText); 
    } 
    }); 

    node.boundsInParentProperty().addListener(new ChangeListener<Bounds>() { 
    @Override public void changed(ObservableValue<? extends Bounds> ov, Bounds oldBounds, Bounds bounds) { 
     dataText.setLayoutX(
     Math.round(
      bounds.getMinX() + bounds.getWidth()/2 - dataText.prefWidth(-1)/2 
     ) 
    ); 
     dataText.setLayoutY(
     Math.round(
      bounds.getMinY() - dataText.prefHeight(-1) * 0.5 
     ) 
    ); 
    } 
    }); 
} 

Der Code funktioniert durch eine Beschriftung auf das übergeordnete Hinzufügen von jedem Balkenknoten, dann wird die Textbeschriftung basierend auf den Balken- und Textgrenzen bei jeder Größenänderung der Leiste dynamisch positioniert.

Ich habe eine sample solution dafür erstellt.

labeledchartwithlegend

+0

Beim Kompilieren des Codes gibt es den Fehler '<>' -Operator ist nicht erlaubt für die Quellstufe unterhalb von 1.7 beim abschließenden BarChart bc = new BarChart <> (xAxis, yAxis) ; – H4SN

+0

Der Code wurde für Java 7 mit dem [diamond operator] geschrieben (http://docs.oracle.com/javase/7/docs/technotes/guides/language/type-inference-generic-instance-creation.html). Sie können entweder Ihren Compiler so einstellen, dass er Java 7-Quelltext als Minimum akzeptiert ([javac] (http://docs.oracle.com/javase/j/docs/technotes/tools/windows/javac.html) Option -source 7 ') oder ändern Sie die Anweisung in' BarChart bc = neues BarChart (xAxis, yAxis); ', das Quellkompatibel zu Java 6 ist. Beachten Sie, dass Sie selbst dann, wenn Sie jdk7 + verwenden kompilieren für einen Quelllevel unter 7. – jewelsea

+0

Vielen Dank jetzt Code funktioniert :) :) – H4SN

0

Es gibt keine solche Option in JFX, über Etiketten für einen Balken im Balkendiagramm.

Sie können eine Balkendiagrammklasse erweitern und Methoden zur Inhaltserstellung und -zuordnung überschreiben.

Sie können den Code der Diagramme im Projekt javafx-ui-charts beobachten, das Sie vom OpenJFX-Repository herunterladen können.

Code of Charts ist nicht schwer zu verstehen ...

Herunterladen rt-Repository von http://hg.openjdk.java.net/openjfx/8/master/rt

Suche Projekt javafx-ui-Charts und öffnen. Finden Sie die Implementierung des Balkendiagramms.

+0

ich habe zuzuteilen gesucht und noch kein Glück können Sie ein Beispiel nennen, oder wenn Sie meinen Code .. Vielen Dank für Ihr Interesse bearbeiten – H4SN

+0

Es wurde ein Link zu einem Code offener Diagramme hinzugefügt. Repo –