-1

what should I do to change barchart color.

Can anyone give me a clue on:

  • How to set a color to linecharts?
  • How to set a css class to series?
public class hmw3 extends Application {

@Override public void start(Stage stage) throws Exception{

        stage.setTitle("HİSTOGRAM");

        final CategoryAxis xAxis = new CategoryAxis();

        final NumberAxis yAxis = new NumberAxis(0,50,10);

        final BarChart<String,Number> bc = 
            new BarChart<String,Number>(xAxis,yAxis);

        bc.setTitle("HİSTOGRAM");

        final VBox verticalbox = new VBox();

        final HBox horizontalbox = new HBox();

        final Button draw = new Button("DRAW");

        CheckBox red = new CheckBox("RED");

        red.setSelected(true);

        CheckBox blue = new CheckBox("BLUE");

        final TextField textfield = new TextField();

        horizontalbox.setAlignment(Pos.BOTTOM_RIGHT);

        horizontalbox.setSpacing(46);

        String filename = textfield.getText();


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

        bc.setPrefSize(800, 600);

        horizontalbox.getChildren().addAll(draw, red, blue,textfield);

        verticalbox.getChildren().addAll(bc, horizontalbox);

        horizontalbox.setPadding(new Insets(10, 10, 10, 50));



        Scene scene  = new Scene(new Group());

        ((Group)scene.getRoot()).getChildren().add(verticalbox);

        stage.setScene(scene);

        stage.show();

                //Setting the button on action if its clicked
        draw.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {         
                try {
                hmw34.occur(textfield.getText(), series1); 
                bc.getData().add(series1);
                bc.setLegendVisible(false);
                } catch (FileNotFoundException e) {
                    System.out.println("Error : No such file"); 
                }
            }
        });


        // rengini düzenleyecek.

    /**  if (red.isSelected()) 
       bc.setStyle("-fx-bar-fill: #000080;"); // red box checked

      else if (blue.isSelected()) 
         bc.setStyle("-fx-bar-fill: #b22222;");// The Blue check box checked*/

    }

    public static void main(String[] args) {
        launch(args);
    }
}
Pete
  • 57,112
  • 28
  • 117
  • 166
  • Have you looked at the Oracle tutorial on using JavaFX Charts? – OttPrime Apr 28 '15 at 17:01
  • yes ı look. they give only that; chart-series-line { -fx-stroke-width: 2px; -fx-effect: null; } .default-color0.chart-series-line { -fx-stroke: #e9967a; } .default-color1.chart-series-line { -fx-stroke: #f0e68c; } .default-color2.chart-series-line { -fx-stroke: #dda0dd; } but ı dont know how can ı use in my code. – Mevlana Ayas Apr 28 '15 at 18:09
  • Are you familiar with skinning your application using CSS as explained at this [link](https://docs.oracle.com/javafx/2/css_tutorial/jfxpub-css_tutorial.htm)? – OttPrime Apr 28 '15 at 18:41
  • [link](http://stackoverflow.com/questions/15233858/how-to-change-color-of-a-single-bar-java-fx?rq=1#) ı didnt do this. everything look clear but it doesnt works – Mevlana Ayas Apr 28 '15 at 19:28

2 Answers2

1
datad.nodeProperty().addListener(new ChangeListener<Node>() {
            @Override
            public void changed(ObservableValue<? extends Node> ov, Node oldNode, Node newNode) {
                newNode.setStyle("-fx-bar-fill: red;");


            }
        });
0

Among the different possibility I tried, the solution of Mevlana Ayas with "setStyle" method is the only one that works.

Assuming "color" is a string describing the desired color. For example:

String color = "hsb(0,0,0)";
String opaqueColor = "hsb(0,0,0,0.2)";

For ScatterChart,LineChart,AreaChart, add the following listener on each Data added to the serie:

data.nodeProperty().addListener(new ChangeListener<Node>() {
            @Override
            public void changed(ObservableValue<? extends Node> ov, Node oldNode, final Node node) {
                if (node != null ) {                   
                    node.setStyle(String.format("-fx-background-color: %s;", color));
                }
            }
}

For lineChart:

serie.nodeProperty().addListener((ObservableValue<? extends Node> o, Node old, Node node) -> {
                if (node != null) {
                    if (node instanceof Path) {
                        node.setStyle(String.format("-fx-stroke: %s;", chartSerie.color));
                    } 
            });

For areaChart:

serie.nodeProperty().addListener((ObservableValue<? extends Node> o, Node old, Node node) -> {
                if (node != null) {
                     if (node instanceof Group) {
                        // AreaChart, assuming FILL is FIRST child and LINE is SECOND child
                        Group group = (Group) node;
                        Path fill = (Path) group.getChildren().get(0);
                        fill.setStyle(String.format("-fx-fill: %s;", chartSerie.opaqueColor));
                        Path line = (Path) group.getChildren().get(1);
                        line.setStyle(String.format("-fx-stroke: %s;", chartSerie.color));
                    }
                }
            });
Daniel
  • 3,813
  • 1
  • 13
  • 11