diff --git a/src/ChartDisplay.java b/src/ChartDisplay.java index fdaca43ecf04e36554fd3fdffc4d73660d05b734..00700ad592d07b721178b68d3b549069b9b6dfe6 100644 --- a/src/ChartDisplay.java +++ b/src/ChartDisplay.java @@ -1,3 +1,153 @@ +/* + Allows the user to select a metric and a time interval for each data point + Generates and displays a chart of the selected data + Allows the user to print the chart + */ + + +import javafx.application.Application; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.print.PrinterJob; +import javafx.scene.Group; +import javafx.scene.Scene; +import javafx.scene.chart.BarChart; +import javafx.scene.chart.CategoryAxis; +import javafx.scene.chart.NumberAxis; +import javafx.scene.chart.XYChart; +import javafx.scene.control.Button; +import javafx.scene.control.CheckBox; +import javafx.scene.control.ComboBox; +import javafx.scene.control.Label; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.HBox; +import javafx.scene.layout.StackPane; +import javafx.scene.layout.VBox; +import javafx.stage.Stage; + + +public class ChartDisplay extends Application { + + + @Override + public void start(Stage primaryStage) throws Exception { + primaryStage.setTitle("Chart Display"); + + ComboBox metricsChoice = new ComboBox(); + + metricsChoice.getItems().add("Number of Impressions"); + metricsChoice.getItems().add("Number of Clicks"); + metricsChoice.getItems().add("Number of Uniques"); + metricsChoice.getItems().add("Number of Bounces"); + metricsChoice.getItems().add("Number of Conversions"); + metricsChoice.getItems().add("Total Cost"); + metricsChoice.getItems().add("CTR"); + metricsChoice.getItems().add("CPA"); + metricsChoice.getItems().add("CPC"); + metricsChoice.getItems().add("CPM"); + metricsChoice.getItems().add("Bounce Rate"); + + metricsChoice.setValue("Choose metric"); + + ComboBox timeChoice = new ComboBox(); + + timeChoice.getItems().add("1 hour"); + timeChoice.getItems().add("1 day"); + timeChoice.getItems().add("1 week"); + + timeChoice.setValue("Choose time period"); + + Button confirmMetric = new Button("Confirm choice"); + + Label histogramLabel = new Label("Display histogram?"); + CheckBox histogramCheck = new CheckBox(); + + HBox histogramBox = new HBox(10,histogramLabel,histogramCheck); + + VBox vBox = new VBox(10,metricsChoice,timeChoice,histogramBox,confirmMetric); + + vBox.setMargin(metricsChoice,new Insets(10,10,10,10)); + vBox.setMargin(timeChoice,new Insets(10,10,10,10)); + vBox.setMargin(histogramBox,new Insets(10,10,10,10)); + vBox.setMargin(confirmMetric,new Insets(10,10,10,10)); + + VBox chartArea = new VBox(10); + + confirmMetric.setOnAction(new EventHandler<ActionEvent>() { + @Override + public void handle(ActionEvent actionEvent) { + String Time1 = "Day 1"; + String Time2 = "Day 2"; + String Time3 = "Day 3"; + String Time4 = "Day 4"; + + //Configuring category and NumberAxis + CategoryAxis x_axis= new CategoryAxis(); + NumberAxis y_axis = new NumberAxis(0,3000,100); + x_axis.setLabel("Time"); // This needs to change dynamically depending on the time interval chosen + y_axis.setLabel("Number of Impressions"); // This needs to change dynamically depending on the metric chosen + + //Configuring BarChart + BarChart<String,Float> barChart = new BarChart(x_axis,y_axis); + barChart.setTitle("Metric Display Chart"); + + //Configuring Series for XY chart + XYChart.Series<String,Float> series = new XYChart.Series<>(); + series.getData().add(new XYChart.Data(Time1,1241)); + series.getData().add(new XYChart.Data(Time2,1092)); + series.getData().add(new XYChart.Data(Time3,2154)); + series.getData().add(new XYChart.Data(Time4,1743)); + + //Adding series to the barchart + barChart.getData().add(series); + + // configuring group and scene + Button printChart = new Button("Print Chart"); + + printChart.setOnAction((event) -> { + PrinterJob job = PrinterJob.createPrinterJob(); + if (job != null && job.showPrintDialog(barChart.getScene().getWindow())) { + boolean success = job.printPage(barChart); + if (success) { + job.endJob(); + } + } + }); + + chartArea.getChildren().addAll(barChart,printChart); + chartArea.setAlignment(Pos.BOTTOM_CENTER); + chartArea.setSpacing(10); + chartArea.setMargin(barChart, new Insets(5,5,5,5)); + chartArea.setMargin(printChart, new Insets(5,5,5,5)); + + } + }); + // -------------------------------------------------------------------------- + + + + HBox hBox = new HBox(); + + hBox.getChildren().add(vBox); + hBox.getChildren().add(chartArea); + + Scene scene = new Scene(hBox, 680, 450); + primaryStage.setScene(scene); + primaryStage.setMinHeight(450); + primaryStage.setMinWidth(680); + primaryStage.show(); + + } + + public static void main(String[] args) { + Application.launch(args); + } +} + + +/* import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; @@ -111,3 +261,4 @@ public class ChartDisplay extends Application { Application.launch(args); } } +*/ \ No newline at end of file