【问题标题】:How to Change XYChart's color in JavaFx?如何在 JavaFx 中更改 XYChart 的颜色?
【发布时间】:2015-04-28 13:37:49
【问题描述】:

我应该怎么做才能改变条形图的颜色。

谁能给我一个线索:

  • 如何为折线图设置颜色?
  • 如何将 css 类设置为系列?
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);
    }
}

【问题讨论】:

  • 您看过 Oracle 使用 JavaFX 图表的教程吗?
  • 是的,我看。他们只给它;图表系列线 { -fx-stroke-width: 2px; -fx-效果:空; } .default-color0.chart-series-line { -fx-stroke: #e9967a; } .default-color1.chart-series-line { -fx-stroke: #f0e68c; } .default-color2.chart-series-line { -fx-stroke: #dda0dd; } 但我不知道如何在我的代码中使用。
  • 您是否熟悉使用 CSS 为您的应用程序设置皮肤,如 link 中所述?
  • link 我没有这样做。一切看起来都很清楚,但它不起作用

标签: java css charts javafx bar-chart


【解决方案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;");


            }
        });

【讨论】:

    【解决方案2】:

    在我尝试的不同可能性中,Mevlana Ayas 的“setStyle”方法是唯一有效的解决方案。

    假设 "color" 是描述所需颜色的字符串。 例如:

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

    对于 ScatterChart、LineChart、AreaChart,在添加到 serie 的每个 Data 上添加以下侦听器:

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

    对于折线图:

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

    对于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));
                        }
                    }
                });
    

    【讨论】:

      猜你喜欢
      • 2013-04-26
      • 2017-11-24
      • 1970-01-01
      • 2013-02-20
      • 2017-01-06
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      • 2012-11-01
      相关资源
      最近更新 更多