利用JavaFx绘制动态温度曲线
使用 JavaFx 绘制三条温度曲线,其温度均是随机产生,且每隔一秒生成一个温度值,绘制其动态变化曲线。
效果图如下:
实现代码:
public class TemperatureUI extends Application {
int t = 1;
int seriesNum = 3;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
// TODO Auto-generated method stub
CategoryAxis xAxis = new CategoryAxis();
NumberAxis yAxis = new NumberAxis();
LineChart lineChart = new LineChart(xAxis, yAxis);
//创建列表存储曲线
ObservableList<XYChart.Series<String, Double>> answer = FXCollections.observableArrayList();
EventHandler<ActionEvent> eventHandler = e -> {
if (seriesNum>0){
//如果曲线的条数少于id的条数,则需要创建一条曲线到列表中
if (answer.size()<seriesNum){
XYChart.Series<String,Double> series = new XYChart.Series<String,Double>();
series.setName("Temperature");
answer.addAll(series);
lineChart.getData().addAll(series);
}
// 遍历列表,给曲线赋值
for (int i = 0; i < answer.size(); i++) {
int temp = (int) (Math.random()*50);
answer.get(i).getData().add(new XYChart.Data(Integer.toString(t), temp));
answer.get(i).setName("Temperature-"+i);
}
t++;
}
};
Timeline animation = new Timeline(new KeyFrame(Duration.millis(1000), eventHandler));
animation.setCycleCount(Timeline.INDEFINITE);
animation.play();
StackPane root = new StackPane();
root.getChildren().add(lineChart);
primaryStage.setScene(new Scene(root, 600, 400));
primaryStage.show();
}
}