1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
package javaapplication4;
import java.io.IOException;
import java.util.Comparator;
import java.util.List;
import java.util.function.Function;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.chart.AreaChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
//import javafx.scene.layout.HBox;
//import javafx.scene.layout.StackPane;
//import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javax.swing.JInternalFrame;
public class temperatureGraph extends JInternalFrame { //
//private final JFrame internal;
private XYChart.Series series1, series2, series3; // les séries du graphique, en attribut
private NumberAxis xAxis;
private NumberAxis yAxis;
private static final String NOM_DU_FICHIER = "C:\\Users\\Crypter\\Documents\\NetBeansProjects\\JavaApplication4\\src\\javaapplication4\\cord.in";
public temperatureGraph() {
super();
@Override public void start(Stage stage) throws NumberFormatException, IOException {
stage.setTitle("Area Chart Sample");
series1 = new XYChart.Series();
series1.setName("Boule1");
series2 = new XYChart.Series();
series2.setName("Boule2");
series3 = new XYChart.Series();
series3.setName("Boule3");
List<XYChart.Data> data = temperatureValues.loadPoints(NOM_DU_FICHIER);
long maxAbs = max(data,XYChart.Data<Long,Long>::getXValue);
long minAbs = min(data,XYChart.Data<Long,Long>::getXValue);
long pasAbs = maxAbs/10;
System.out.print("\npasAbs="+pasAbs);
xAxis = new NumberAxis(minAbs, maxAbs, pasAbs); // min,max,pas de l'axe d'absicce
long maxOrd = max(data,XYChart.Data<Long,Long>::getYValue);
long minOrd = min(data,XYChart.Data<Long,Long>::getYValue);
long pasOrd=maxOrd/10;
System.out.print("\npasOrd="+pasOrd);
yAxis = new NumberAxis(minOrd, maxOrd, pasOrd);
refreshSeries(data);
final AreaChart<Number,Number> ac =
new AreaChart<>(xAxis,yAxis);
xAxis.setForceZeroInRange(true);
ac.setTitle("Temperature Monitoring (in Degrees C)");
Button btn = new Button();
btn.setText("Live Refresh ... ");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
try {
refreshSeries(NOM_DU_FICHIER);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
btn.setTranslateX(600);
btn.setTranslateY(10);
// btn.setTranslateX(500);
// btn.setTranslateY(394);
VBox vbox = new VBox();
Scene scene = new Scene(vbox, 1500, 1000);
ac.getData().addAll(series1, series2, series3);
vbox.getChildren().addAll(btn, ac);
stage.setHeight(480);
stage.setWidth(800);
// primaryStage.show();
// Scene scene = new Scene(ac,800,600);
//scene.getStylesheets().add("areachartsample/Chart.css");
ac.setHorizontalZeroLineVisible(true);
// ac.getData().addAll(series1, series2, series3);
stage.setScene(scene);
stage.show();
}
private long max(List<XYChart.Data> data,Function<XYChart.Data,Long> function) {
return data.stream().map(function).max(Comparator.naturalOrder()).orElse(0L);
}
private long min(List<XYChart.Data> data, Function<XYChart.Data,Long> function) {
return data.stream().map(function).min(Comparator.naturalOrder()).orElse(0L);
}
private void refreshSeries(String filename) throws IOException {
List<XYChart.Data> data = temperatureValues.loadPoints(filename);
refreshSeries(data);
refreshAxis(data);
}
private void refreshAxis(List<XYChart.Data> data) {
long maxAbs = max(data,XYChart.Data<Long,Long>::getXValue);
long minAbs = min(data,XYChart.Data<Long,Long>::getXValue);
xAxis.setLowerBound(minAbs);
xAxis.setUpperBound(maxAbs);
long maxOrd = max(data,XYChart.Data<Long,Long>::getYValue);
long minOrd = min(data,XYChart.Data<Long,Long>::getYValue);
yAxis.setLowerBound(minOrd);
yAxis.setUpperBound(maxOrd);
}
private void refreshSeries(List<XYChart.Data> data) throws IOException {
series1.getData().clear(); // on supprime toutes les données de series1
series2.getData().clear(); // on supprime toutes les données de series2
series3.getData().clear(); // on supprime toutes les données de series3
data.stream().limit(4).forEach(point-> series1.getData().add(point)); // première série (limit donne le nombre d'éléments à parcourir)
data.stream().skip(4).limit(4).forEach(point-> series2.getData().add(point)); // deuxième série (skip donne le nombre d'éléments qu'on "saute", qu'on ignore
data.stream().skip(8).limit(4).forEach(point-> series3.getData().add(point)); // troisième série
}
//public static void main(String[] args) {
// launch(args);
// }
}
} |
Partager