001package ca.bc.webarts.javaFX; 002 003import javafx.application.Application; 004import javafx.scene.Group; 005import javafx.scene.Scene; 006import javafx.stage.Stage; 007import java.util.ArrayList; 008import java.util.Arrays; 009import java.util.List; 010 011import javax.xml.parsers.DocumentBuilderFactory; 012import javax.xml.parsers.DocumentBuilder; 013import org.w3c.dom.Document; 014import org.w3c.dom.NodeList; 015// import org.w3c.dom.Node; 016import org.w3c.dom.Element; 017import java.io.File; 018 019import javafx.collections.FXCollections; 020import javafx.event.ActionEvent; 021import javafx.event.EventHandler; 022import javafx.geometry.Side; 023import javafx.scene.Node; 024import javafx.scene.chart.BarChart; 025import javafx.scene.chart.CategoryAxis; 026import javafx.scene.chart.NumberAxis; 027import javafx.scene.chart.XYChart; 028 029/** 030 * 031 * An advanced bar chart with a variety of controls. 032 * 033 * @see javafx.scene.chart.BarChart 034 * @see javafx.scene.chart.Chart 035 * @see javafx.scene.chart.NumberAxis 036 * @see javafx.scene.chart.XYChart 037 */ 038public class MyFXBarChart extends Application 039{ 040 041 private void init(Stage primaryStage) 042 { 043 Group root = new Group(); 044 primaryStage.setScene(new Scene(root)); 045 046 root.getChildren().add(createExerciseChart()); 047 } 048 049 050 private static String getTagValue(String sTag, Element eElement) 051 { 052 NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes(); 053 org.w3c.dom.Node nValue = (org.w3c.dom.Node) nlList.item(0); 054 return nValue.getNodeValue(); 055 } 056 057 058 protected BarChart<String, Number> createExerciseChart() 059 { 060 CategoryAxis xAxis = new CategoryAxis(); 061 NumberAxis yAxis = new NumberAxis(); 062 String dateStr = ""; 063 int calories = 0; 064 double miles = 0; 065 double km = 0; 066 String separator = java.io.File.separator; 067 068 String [] categoryNames = {"Calories"}; 069 yAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(yAxis,"",null)); 070 BarChart<String,Number> bc = new BarChart<String,Number>(xAxis,yAxis); 071 // setup chart 072 bc.setTitle("Toms Calories Burned On Treadmill"); 073 xAxis.setLabel("Date"); 074 xAxis.setCategories(FXCollections.<String>observableArrayList(Arrays.asList(categoryNames))); 075 yAxis.setLabel("Calories"); 076 // add starting data 077 XYChart.Series<String,Number> series1 = new XYChart.Series<String,Number>(); 078 XYChart.Series<String,Number> series2 = new XYChart.Series<String,Number>(); 079 series1.setName("Calories"); 080 series2.setName("km"); 081 082 for (int i = 5;i>0; i--) 083 { 084 try 085 { 086 File fXmlFile = new File(separator+"media"+separator+"TGLIVESTRNG"+separator+"LS"+separator+"USERS"+separator+"USER2"+separator+"0"+i+".wrk"); 087 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 088 DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 089 Document doc = dBuilder.parse(fXmlFile); 090 doc.getDocumentElement().normalize(); 091 092 System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); 093 NodeList nList = doc.getElementsByTagName("summary"); 094 System.out.println("-----------------------"); 095 org.w3c.dom.Node nNode = nList.item(0); 096 if (nNode.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) 097 { 098 Element eElement = (Element) nNode; 099 System.out.println("Year : " + getTagValue("Year", eElement)); 100 System.out.println("Month : " + getTagValue("Month", eElement)); 101 System.out.println("Date : " + getTagValue("Date", eElement)); 102 dateStr = getTagValue("Year", eElement)+"_"+getTagValue("Month", eElement)+"_"+getTagValue("Date", eElement); 103 System.out.println("Avgpace : " + getTagValue("Avgpace", eElement)); 104 System.out.println("Calories : " + getTagValue("Calories", eElement)); 105 calories = Integer.parseInt(getTagValue("Calories", eElement)); 106 System.out.print("Distances : " + getTagValue("Distances", eElement)+ " miles"); 107 miles = Double.parseDouble(getTagValue("Distances", eElement)); 108 km = miles / 0.62; 109 System.out.println(" ("+km+" km)"); 110 System.out.println("Totalelev : " + getTagValue("Totalelev", eElement)); 111 System.out.println("TotalTime : " + getTagValue("TotalTime", eElement)); 112 } 113 //fXmlFile.close(); 114 } 115 catch (Exception e) 116 { 117 e.printStackTrace(); 118 } 119 120 121 // create sample data 122 series1.getData().add(new XYChart.Data<String,Number>(dateStr, calories)); 123 series2.getData().add(new XYChart.Data<String,Number>(dateStr, km)); 124 } 125 bc.getData().add(series1); 126 bc.getData().add(series2); 127 128 //return createDefaultChart(); 129 return bc; 130 } 131 132 protected BarChart<String, Number> createDefaultChart() { 133 final String[] years = {"2009", "2010", "2011"}; 134 final CategoryAxis xAxis = new CategoryAxis(); 135 final NumberAxis yAxis = new NumberAxis(); 136 yAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(yAxis,"$",null)); 137 final BarChart<String,Number> bc = new BarChart<String,Number>(xAxis,yAxis); 138 // setup chart 139 bc.setTitle("Toms First JavaFX BarChart"); 140 xAxis.setLabel("Year"); 141 xAxis.setCategories(FXCollections.<String>observableArrayList(Arrays.asList(years))); 142 yAxis.setLabel("Price"); 143 // add starting data 144 XYChart.Series<String,Number> series1 = new XYChart.Series<String,Number>(); 145 series1.setName("Data Series 1"); 146 XYChart.Series<String,Number> series2 = new XYChart.Series<String,Number>(); 147 series2.setName("Data Series 2"); 148 XYChart.Series<String,Number> series3 = new XYChart.Series<String,Number>(); 149 series3.setName("Data Series 3"); 150 // create sample data 151 series1.getData().add(new XYChart.Data<String,Number>(years[0], 567)); 152 series1.getData().add(new XYChart.Data<String,Number>(years[1], 1292)); 153 series1.getData().add(new XYChart.Data<String,Number>(years[2], 2180)); 154 series2.getData().add(new XYChart.Data<String,Number>(years[0], 956)); 155 series2.getData().add(new XYChart.Data<String,Number>(years[1], 1665)); 156 series2.getData().add(new XYChart.Data<String,Number>(years[2], 2450)); 157 series3.getData().add(new XYChart.Data<String,Number>(years[0], 800)); 158 series3.getData().add(new XYChart.Data<String,Number>(years[1], 1000)); 159 series3.getData().add(new XYChart.Data<String,Number>(years[2], 2800)); 160 bc.getData().add(series1); 161 bc.getData().add(series2); 162 bc.getData().add(series3); 163 return bc; 164 } 165 166 @Override public void start(Stage primaryStage) throws Exception { 167 init(primaryStage); 168 primaryStage.show(); 169 } 170 public static void main(String[] args) { launch(args); } 171}