如何为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) {
//定义x轴
NumberAxis xAxis = new NumberAxis(1960, 2020, 10);
xAxis.setLabel("Years");
//定义y轴
NumberAxis yAxis = new NumberAxis (0, 350, 50);
yAxis.setLabel("No.of schools");
//准备XY图表的数据
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));
//创建数据
ObservableList<Series<Number, Number>> data =
FXCollections.observableArrayList(series);
//创建折线图
LineChart<Number,Number> lineChart = new LineChart<Number,Number>(xAxis, yAxis, data ) {
//覆盖layoutPlotChildren方法
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);
}
}
};
//将折线图添加到堆栈窗格
StackPane pane = new StackPane(lineChart);
//设置场景
Scene scene = new Scene(pane, 595, 300);
stage.setTitle("Line Chart");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
输出结果
以上是 如何为JavaFX xy图表的绘制区域着色? 的全部内容, 来源链接: utcz.com/z/316489.html