如何对 JavaFX xy 图表所描绘的区域进行着色?
所有 XY 图表都包含名为layoutPlotChildren()的抽象方法。给 XY 图表的描绘区域(区域)着色的一种方法是覆盖该方法。通常,它被用来更新和布局子图。
在本方法的主体中:
获取系列数据。
提取描绘的点。
使用提取的点在描绘区域中绘制多边形。
对多边形设置所需颜色。
示例
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.chart.XYChart.Series;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Polygon;
public class EnhancingGraphPlot extends Application {
public void start(Stage stage) {
//Defining the x axis
NumberAxis xAxis = new NumberAxis(1960, 2020, 10);
xAxis.setLabel("Years");
//Defining the y axis
NumberAxis yAxis = new NumberAxis (0, 350, 50);
yAxis.setLabel("No.of schools");
//Preparing the data for the X-Y chart
XYChart.Series<Number,Number> series = new XYChart.Series<Number,Number>();
series.setName("No of schools in an year");
series.getData().add(new XYChart.Data<Number,Number>(1970, 15));
series.getData().add(new XYChart.Data<Number,Number>(1980, 30));
series.getData().add(new XYChart.Data<Number,Number>(1990, 60));
series.getData().add(new XYChart.Data<Number,Number>(2000, 120));
series.getData().add(new XYChart.Data<Number,Number>(2013, 240));
series.getData().add(new XYChart.Data<Number,Number>(2014, 300));
//Creating data
ObservableList<Series<Number, Number>> data =
FXCollections.observableArrayList(series);
//Creating the Line chart
LineChart<Number,Number> lineChart = new LineChart<Number,Number>(xAxis, yAxis, data ) {
//Overriding the layoutPlotChildren method
protected void layoutPlotChildren() {
super.layoutPlotChildren();
Series<Number,Number> series = (Series<Number,Number>)
getData().get(0);
ObservableList<Data<Number,Number>> listOfData = series.getData();
for(int i = 0; i < listOfData.size()-1; i++) {
double x1 = getXAxis().getDisplayPosition(listOfData.get(i).getXValue());
double y1 = getYAxis().getDisplayPosition(0);
double x2 = getXAxis().getDisplayPosition(listOfData.get((i + 1)).getXValue());
double y2 = getYAxis().getDisplayPosition(0);
Polygon polygon = new Polygon();
polygon.getPoints().addAll(new Double[]{
x1,y1, x1, getYAxis().getDisplayPosition(listOfData.get(i).getYValue()), x2,getYAxis().getDisplayPosition(listOfData.get((i+1)).getYValue()), x2,y2
});
getPlotChildren().add(polygon);
polygon.toFront();
polygon.setFill(Color.DIMGRAY);
}
}
};
//Adding the line chart to stack pane
StackPane pane = new StackPane(lineChart);
//Setting the scene
Scene scene = new Scene(pane, 595, 300);
stage.setTitle("Line Chart");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]){
launch(args);
}
}输出

广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
安卓
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP