如何更改javafx散点图中图表元件的大小?

时间:2016-09-23 10:04:51

标签: javafx

我可以更改符号形状,颜色,填充,半径,但我似乎无法找到会改变符号大小的CSS项目。

我曾经想过,如果我重新创建具有较小SVG路径的符号,这可能是一种方法,但看起来我的较小形状无论如何都会扩大规模。

我需要更小的符号,但到目前为止还没有找到缩放它们的方法。

2 个答案:

答案 0 :(得分:2)

这是代码和循环,您可以在其中找到所有符号并更改宽度和高度。我只知道这种方式。如果您在CSS中尝试此操作,您还将更改图表下的图例。

public class Chart extends Application {

  @Override 
  public void start(Stage stage) {

    //set Axis
    final NumberAxis xAxis = new NumberAxis();
    final NumberAxis yAxis = new NumberAxis();

    //chart
    final ScatterChart<Number, Number> lineChart = new ScatterChart<Number, Number>(xAxis, yAxis);

    //prepare series
    XYChart.Series series1 = new XYChart.Series();
    series1.getData().add(new XYChart.Data(1, 2));
    series1.getData().add(new XYChart.Data(2, 2));
    series1.getData().add(new XYChart.Data(3, 1));
    series1.getData().add(new XYChart.Data(3, 3));
    series1.getData().add(new XYChart.Data(5, 2));

    HBox hbox = new HBox();
    //add series to chart
    lineChart.getData().addAll(series1);

    //take all series
    for (XYChart.Series<Number, Number> series : lineChart.getData()) {
      //for all series, take date, each data has Node (symbol) for representing point
      for (XYChart.Data<Number, Number> data : series.getData()) {
        // this node is StackPane
        StackPane stackPane =  (StackPane) data.getNode();
        stackPane.setPrefWidth(50);
        stackPane.setPrefHeight(50);
      }
    }

    hbox.getChildren().addAll(lineChart);
    Scene scene = new Scene(hbox, 800, 600);
    scene.getStylesheets().add(getClass().getResource("/resources/chart.css").toExternalForm());
    stage.setScene(scene);
    stage.show();
  }

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

以下是您可以为此系列半径设置的CSS

.default-color0.chart-symbol {
    -fx-background-radius: 30px;
}

在此示例中,符号更大 enter image description here

答案 1 :(得分:1)

这是我在SVG路径中创建矩形然后在css中更改大小的方式。

.chart-symbol{
    -fx-shape: "M 20.0 20.0  v24.0 h 10.0  v-24   Z";
    -fx-padding: 7px 7px 7px 7px;
}