changeset 25:0a99effcfd3b

add example for Scheduler
author sugi
date Thu, 31 Oct 2013 01:17:10 +0900
parents 712fee3b7090
children 650c0f1270a3
files src/example/AdvancedStockLineChartSample.java src/example/SchedulerViewerTest.java
diffstat 2 files changed, 260 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/example/AdvancedStockLineChartSample.java	Thu Oct 31 01:17:10 2013 +0900
@@ -0,0 +1,139 @@
+package example;
+
+/**
+ * Copyright (c) 2008, 2012 Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ */
+import javafx.application.Application;
+import javafx.scene.Group;
+import javafx.scene.Scene;
+import javafx.stage.Stage;
+import javafx.animation.Animation;
+import javafx.animation.KeyFrame;
+import javafx.animation.Timeline;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.scene.chart.LineChart;
+import javafx.scene.chart.NumberAxis;
+import javafx.scene.chart.XYChart;
+import javafx.util.Duration;
+
+/**
+ * A simulated stock line chart.
+ *
+ * @see javafx.scene.chart.Chart
+ * @see javafx.scene.chart.LineChart
+ * @see javafx.scene.chart.NumberAxis
+ * @see javafx.scene.chart.XYChart
+ */
+public class AdvancedStockLineChartSample extends Application {
+
+	private XYChart.Series<Number,Number> hourDataSeries;
+	private XYChart.Series<Number,Number> minuteDataSeries;
+	private NumberAxis xAxis;
+	private Timeline animation;
+
+	private double hours = 0;
+	private double minutes = 0;
+	private double timeInHours = 0;
+	private double prevY = 10;
+	private double y = 10;
+
+	private void init(Stage primaryStage) {
+		Group root = new Group();
+		primaryStage.setScene(new Scene(root));
+		root.getChildren().add(createChart());
+		// create timeline to add new data every 60th of second
+		animation = new Timeline();
+		animation.getKeyFrames().add(new KeyFrame(Duration.millis(1000/60), new EventHandler<ActionEvent>() {
+			@Override public void handle(ActionEvent actionEvent) {
+				// 6 minutes data per frame
+				for(int count=0; count < 6; count++) {
+					nextTime();
+					plotTime();
+				}
+			}
+		}));
+		animation.setCycleCount(Animation.INDEFINITE);
+	}
+
+	protected LineChart<Number, Number> createChart() {
+		xAxis = new NumberAxis(0,25,5);
+		final NumberAxis yAxis = new NumberAxis(0,100,10);
+		final LineChart<Number,Number> lc = new LineChart<Number,Number>(xAxis,yAxis);
+		// setup chart
+		lc.setId("lineStockDemo");
+		lc.setCreateSymbols(false);
+		lc.setAnimated(false);
+		lc.setLegendVisible(false);
+		lc.setTitle("Task Viewer");
+		xAxis.setLabel("Time");
+		xAxis.setForceZeroInRange(false);
+		yAxis.setLabel("Task Name");
+		yAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(yAxis,"$",null));
+		// add starting data
+		hourDataSeries = new XYChart.Series<Number,Number>();
+		minuteDataSeries = new XYChart.Series<Number,Number>();
+		// create some starting data
+
+		minuteDataSeries.getData().add(new XYChart.Data<Number,Number>(timeInHours,prevY));
+		for (double m=0; m<(60); m++) {
+			nextTime();
+			plotTime();
+		}
+		lc.getData().add(minuteDataSeries);
+		lc.getData().add(hourDataSeries);
+		return lc;
+	}
+
+	private void nextTime() {
+		if (minutes == 59) {
+			hours ++;
+			minutes = 0;
+		} else {
+			minutes ++;
+		}
+		timeInHours = hours + ((1d/60d)*minutes);
+	}
+
+	private void plotTime() {
+		if ((timeInHours % 1) == 0) {
+			// change of hour
+			double oldY = y;
+			y = prevY - 10 + (Math.random()*20);
+			prevY = oldY;
+			while (y < 10 || y > 90) y = y - 10 + (Math.random()*20);
+			if (timeInHours % 30 > 15){
+				hourDataSeries.getData().add(new XYChart.Data<Number, Number>(timeInHours, 10));
+			}else {
+				hourDataSeries.getData().add(new XYChart.Data<Number, Number>(timeInHours, 20));
+			}
+			// after 25hours delete old data
+			if (timeInHours > 25) hourDataSeries.getData().remove(0);
+			// every hour after 24 move range 1 hour
+			if (timeInHours > 24) {
+				xAxis.setLowerBound(xAxis.getLowerBound()+1);
+				xAxis.setUpperBound(xAxis.getUpperBound()+1);
+			}
+		}
+		//double min = (timeInHours % 1);
+		//double randomPickVariance = Math.random();
+
+		//if (timeInHours > 25) minuteDataSeries.getData().remove(0);
+	}
+
+	public void play() {
+		animation.play();
+	}
+
+	@Override public void stop() {
+		animation.pause();
+	}    
+
+	@Override public void start(Stage primaryStage) throws Exception {
+		init(primaryStage);
+		primaryStage.show();
+		play();
+	}
+	public static void main(String[] args) { launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/example/SchedulerViewerTest.java	Thu Oct 31 01:17:10 2013 +0900
@@ -0,0 +1,121 @@
+package example;
+/**
+ * Copyright (c) 2008, 2012 Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ */
+import javafx.animation.Timeline;
+import javafx.application.Application;
+import javafx.scene.Group;
+import javafx.scene.Scene;
+import javafx.stage.Stage;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.scene.chart.*;
+import javafx.animation.Animation;
+import javafx.animation.KeyFrame;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.scene.chart.NumberAxis;
+import javafx.util.Duration;
+
+/**
+ * A sample that displays data in a stacked bar chart.
+ *
+ * @see javafx.scene.chart.StackedBarChart
+ * @see javafx.scene.chart.CategoryAxisBuilder
+ * @see javafx.scene.chart.NumberAxis
+ * @related charts/bar/BarChart
+ *
+ */
+public class SchedulerViewerTest extends Application {
+	private Timeline animation;
+	
+	private CategoryAxis xAxis;
+	private NumberAxis yAxis;
+	
+	private double hours = 0;
+    private double minutes = 0;
+    private double timeInHours = 0;
+
+	
+    private void init(Stage primaryStage) {
+        Group root = new Group();
+        primaryStage.setScene(new Scene(root));
+        root.getChildren().add(createChart());
+        
+        animation = new Timeline();
+        animation.getKeyFrames().add(new KeyFrame(Duration.millis(1000/60), new EventHandler<ActionEvent>() {
+            @Override public void handle(ActionEvent actionEvent) {
+                // 6 minutes data per frame
+                for(int count=0; count < 6; count++) {
+                   // nextTime();
+                    plotTime();
+                }
+            }
+        }));
+        animation.setCycleCount(Animation.INDEFINITE);
+    }
+    
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+	protected StackedBarChart createChart(){
+    	String[] years = {"2007", "2008", "2009"};
+    	xAxis = new CategoryAxis(FXCollections.<String>observableArrayList(years));
+        yAxis = new NumberAxis(0,75,5); // (start, end, interval)
+        
+        ObservableList<StackedBarChart.Series> barChartData = FXCollections.observableArrayList(
+            new StackedBarChart.Series("Region 1", FXCollections.observableArrayList(
+               new StackedBarChart.Data(years[0], 10d),
+               new StackedBarChart.Data(years[1], 12d),
+               new StackedBarChart.Data(years[2], 15d)
+            )),
+            new StackedBarChart.Series("Region 2", FXCollections.observableArrayList(
+               new StackedBarChart.Data(years[0], 20),
+               new StackedBarChart.Data(years[1], 16),
+               new StackedBarChart.Data(years[2], 25)
+            )),
+            new StackedBarChart.Series<String ,Number>("Region 3", FXCollections.observableArrayList(
+               new StackedBarChart.Data<String, Number>(years[0], 15),
+               new StackedBarChart.Data<String, Number>(years[1], 19),
+               new StackedBarChart.Data<String, Number>(years[2], 27)
+            ))
+        );
+        StackedBarChart cc = new StackedBarChart(xAxis, yAxis);
+        cc.setData(barChartData);
+        cc.setCategoryGap(25.0d);
+        //hourDataSeries = new XYChart.Series<Number,Number>();
+    	//hourDataSeries.setName("Time");
+    	//hourDataSeries.getData().add(new XYChart.Data<Number,Number>(timeInHours,prevY));
+    	for (double m=0; m<(60); m++) {
+    		nextTime();
+            plotTime();
+        }
+    	//cc.getData().add(hourDataSeries);
+        return cc;
+    }
+    private void nextTime() {
+        if (minutes == 59) {
+            hours ++;
+            minutes = 0;
+        } else {
+            minutes ++;
+        }
+        timeInHours = hours + ((1d/60d)*minutes);
+        System.out.println(this.timeInHours);
+    }
+    
+    public void plotTime(){
+    	yAxis.setLowerBound(yAxis.getLowerBound()+1);
+        yAxis.setUpperBound(yAxis.getUpperBound()+1);
+    }
+
+    public void play() {
+        animation.play();
+    }
+
+    @Override public void start(Stage primaryStage) throws Exception {
+        init(primaryStage);
+        primaryStage.show();
+        play();
+    }
+    public static void main(String[] args) { launch(args); }
+}