网站开发目录规范网站建设需求模板
网站开发目录规范,网站建设需求模板,松原市建设局网站,生态建设网站java 和javafx我最喜欢的JavaFX 2功能之一是它在javafx.scene.chart包中提供的标准图表。 该软件包提供了几种不同类型的现成图表。 除其中之一#xff08; PieChart #xff09;外#xff0c;所有其他均为“ 2轴图”#xff08; XYChart的特定实现#xff09;。 在本文中… java 和javafx 我最喜欢的JavaFX 2功能之一是它在javafx.scene.chart包中提供的标准图表。 该软件包提供了几种不同类型的现成图表。 除其中之一 PieChart 外所有其他均为“ 2轴图” XYChart的特定实现。 在本文中我研究了XYChart这些专业之间的共性。 在此过程中我将介绍一些方便的Java 7功能。 接下来显示javafx.scene.chart包中关键图类型的UML类图。 注意AreaChart StackedAreaChart BarChart StackedBarChart BubbleChart LineChart和ScatterChart都扩展了XYChart 。 正如上面的UML图使用JDeveloper生成所示 PieChart直接扩展Chart 而所有其他图表类型都扩展XYChart 。 因为除PieChart之外的所有其他图表类型都扩展了XYChart 所以它们共享一些共同的功能。 例如它们都是带有水平x轴和垂直y轴的2轴图表。 它们通常允许为所有XY图表以相同的格式数据结构指定数据。 这篇文章的其余部分演示了能够对大多数XYChart使用相同的数据。 图表的主要用途是显示数据因此下一个代码清单指示从Oracle数据库中的“ hr ” 样本模式检索数据。 请注意JDBC_URLUSERNAMEPASSWORD和AVG_SALARIES_PER_DEPARTMENT_QUERY是在JDBC连接和查询中使用的常量字符串。 getAverageDepartmentsSalaries /*** Provide average salary per department name.* * return Map of department names to average salary per department.*/
public MapString, Double getAverageDepartmentsSalaries()
{final MapString, Double averageSalaryPerDepartment new HashMap();try (final Connection connection DriverManager.getConnection(JDBC_URL, USERNAME, PASSWORD);final Statement statement connection.createStatement();final ResultSet rs statement.executeQuery(AVG_SALARIES_PER_DEPARTMENT_QUERY)){while (rs.next()){final String departmentName rs.getString(COLUMN_DEPARTMENT_NAME);final Double salaryAverage rs.getDouble(ALIAS_AVERAGE_SALARY);averageSalaryPerDepartment.put(departmentName, salaryAverage);}}catch (SQLException sqlEx){LOGGER.log(Level.SEVERE,Unable to get average salaries per department - {0}, sqlEx.toString());}return averageSalaryPerDepartment;
} 上面的Java代码段使用JDBC检索数据以将部门名称字符串Map为每个部门中雇员的平均工资。 此代码中使用了几个方便的Java 7功能。 一个小的功能是与局部变量averageSalaryPerDepartment 第8行的声明一起使用的钻石运算符的推断通用参数化类型。 这是语法糖的一小部分但确实使代码更简洁。 Java 7的一项更重要的功能是使用try-with-resources语句来处理Connection Statement和ResultSet资源第9-11行。 与以前使用JDBC相比即使面对异常这也是处理这些资源打开和关闭的一种更好的方法。 try-with-resources语句上的Java Tutorials页面广告该语句“确保在语句末尾关闭每个资源”并且无论“ try语句正常完成还是突然完成”每个资源都将“关闭”。 该页面还指出与上述代码一样在同一语句中指定了多个资源时“资源的close方法将按其创建的相反顺序进行调用。” 从数据库中检索到的数据可以放入适当的数据结构中以支持大多数XYCharts的使用。 这在下一个方法中显示。 ChartMaker.createXyChartDataForAverageDepartmentSalary地图 /*** Create XYChart Data representing average salary per department name.* * param newAverageSalariesPerDepartment Map of department name (keys) to* average salary for each department (values).* return XYChart Data representing average salary per department.*/
public static ObservableListXYChart.SeriesString, Double createXyChartDataForAverageDepartmentSalary(final MapString, Double newAverageSalariesPerDepartment)
{final SeriesString, Double series new Series();series.setName(Departments);for (final Map.EntryString, Double entry : newAverageSalariesPerDepartment.entrySet()){series.getData().add(new XYChart.Data(entry.getKey(), entry.getValue()));}final ObservableListXYChart.SeriesString, Double chartData FXCollections.observableArrayList();chartData.add(series);return chartData;
} 刚刚显示的方法将检索到的数据放置在几乎所有基于XYChart的图表都可以使用的数据结构中。 现在将检索到的数据打包到JavaFX可观察的集合中就可以轻松生成图表。 下一个代码片段显示了用于生成多个基于XYChart的图表面积条形图气泡图折线图和散点图的方法。 请注意它们都是多么相似以及如何使用相同方法提供的相同数据。 StackedBar和StackedArea图表也可以使用类似的数据但此处未显示因为它们对于本示例中使用的单个数据系列没有意义。 生成除气泡图和堆积图以外的XY图的方法 private XYChartString, Double generateAreaChart(final AxisString xAxis, final AxisDouble yAxis)
{final AreaChartString, Double areaChart new AreaChart(xAxis, yAxis,ChartMaker.createXyChartDataForAverageDepartmentSalary(this.databaseAccess.getAverageDepartmentsSalaries()));return areaChart;
}private XYChartString, Double generateBarChart(final AxisString xAxis, final AxisDouble yAxis)
{final BarChartString, Double barChart new BarChart(xAxis, yAxis,ChartMaker.createXyChartDataForAverageDepartmentSalary(this.databaseAccess.getAverageDepartmentsSalaries()));return barChart;
}private XYChartNumber, Number generateBubbleChart(final AxisString xAxis, final AxisDouble yAxis)
{final AxisNumber deptIdXAxis new NumberAxis();deptIdXAxis.setLabel(Department ID);final BubbleChartNumber, Number bubbleChart new BubbleChart(deptIdXAxis, yAxis,ChartMaker.createXyChartDataForAverageDepartmentSalaryById(this.databaseAccess.getAverageDepartmentsSalariesById()));return bubbleChart;
}private XYChartString, Double generateLineChart(final AxisString xAxis, final AxisDouble yAxis)
{final LineChartString, Double lineChart new LineChart(xAxis, yAxis,ChartMaker.createXyChartDataForAverageDepartmentSalary(this.databaseAccess.getAverageDepartmentsSalaries()));return lineChart;
}private XYChartString, Double generateScatterChart(final AxisString xAxis, final AxisDouble yAxis)
{final ScatterChartString, Double scatterChart new ScatterChart(xAxis, yAxis,ChartMaker.createXyChartDataForAverageDepartmentSalary(this.databaseAccess.getAverageDepartmentsSalaries()));return scatterChart;
} 这些方法是如此相似以至于我实际上可以使用方法句柄或更传统的反射API来反射性地调用适当的图表构造函数而不是使用单独的方法。 但是我在2月的2013年RMOUG培训日演讲中使用了这些功能因此想保留图表特定的构造函数以使它们对观众更清晰。 XYChart类型的常规处理的一个例外是BubbleChart的处理。 此图表的x轴需要数字类型因此上面提供的基于字符串部门名称的x轴数据将不起作用。 另一种方法此处未显示提供了一个查询该查询按部门ID长而不是部门名称返回平均工资。 接下来显示稍有不同的generateBubbleChart方法。 generateBubbleChartAxisAxis private XYChartNumber, Number generateBubbleChart(final AxisString xAxis, final AxisDouble yAxis){final AxisNumber deptIdXAxis new NumberAxis();deptIdXAxis.setLabel(Department ID);final BubbleChartNumber, Number bubbleChart new BubbleChart(deptIdXAxis, yAxis,ChartMaker.createXyChartDataForAverageDepartmentSalaryById(this.databaseAccess.getAverageDepartmentsSalariesById()));return bubbleChart;} 可以编写代码直接调用这些不同的图表生成方法但这为使用Java 7的方法句柄提供了一个很好的机会。 下一个代码片段显示了此操作。 该代码不仅演示了方法句柄而且还使用了Java 7的多捕获异常处理机制第77行。 /*** Generate JavaFX XYChart-based chart.* * param chartChoice Choice of chart to be generated.* return JavaFX XYChart-based chart; may be null.* throws IllegalArgumentException Thrown if the provided parameter is null.*/
private XYChartString, Double generateChart(final ChartTypes chartChoice)
{XYChartString, Double chart null;final AxisString xAxis new CategoryAxis();xAxis.setLabel(Department Name);final Axis? extends Number yAxis new NumberAxis();yAxis.setLabel(Average Salary);if (chartChoice null){throw new IllegalArgumentException(Provided chart type was null; chart type must be specified.);}else if (!chartChoice.isXyChart()){LOGGER.log(Level.INFO,Chart Choice {0} {1} an XYChart.,new Object[]{chartChoice.name(), chartChoice.isXyChart() ? IS : is NOT});}final MethodHandle methodHandle buildAppropriateMethodHandle(chartChoice);try{chart methodHandle ! null? (XYChartString, Double) methodHandle.invokeExact(this, xAxis, yAxis): null;chart.setTitle(Average Department Salaries);}catch (WrongMethodTypeException wmtEx){LOGGER.log(Level.SEVERE,Unable to invoke method because it is wrong type - {0},wmtEx.toString());}catch (Throwable throwable){LOGGER.log(Level.SEVERE,Underlying method threw a Throwable - {0},throwable.toString());}return chart;
}/*** Build a MethodHandle for calling the appropriate chart generation method* based on the provided ChartTypes choice of chart.* * param chartChoice ChartTypes instance indicating which type of chart* is to be generated so that an appropriately named method can be invoked* for generation of that chart.* return MethodHandle for invoking chart generation.*/
private MethodHandle buildAppropriateMethodHandle(final ChartTypes chartChoice)
{MethodHandle methodHandle null;final MethodType methodDescription MethodType.methodType(XYChart.class, Axis.class, Axis.class);final String methodName generate chartChoice.getChartTypeName() Chart;try{methodHandle MethodHandles.lookup().findVirtual(this.getClass(), methodName, methodDescription);}catch (NoSuchMethodException | IllegalAccessException exception){LOGGER.log(Level.SEVERE,Unable to acquire MethodHandle to method {0} - {1},new Object[]{methodName, exception.toString()});}return methodHandle;
} 随后的一系列图像显示了由JavaFX渲染时这些XY图表的显示方式。 面积图 条形图 气泡图 折线图 散点图 如上所述方法句柄可能已经被用来进一步减少代码因为用于生成每个XYChart单独方法不是绝对必要的并且可以根据所需的图表类型进行反射式调用。 还值得强调的是如果x轴数据是数字的则对于所有的XYChart类型包括气泡图代码都是相同的并且可以反射地调用。 JavaFX使得生成代表所提供数据的有吸引力的图表变得容易。 Java 7功能使代码更简洁更具表现力并在适当的时候允许容易地应用反射从而使此操作变得更加容易。 参考来自JCG合作伙伴 Dustin Marx的JavaFX 2 XYCharts和Java 7功能来自Inspired by Actual Events博客。 翻译自: https://www.javacodegeeks.com/2013/01/javafx-2-xycharts-and-java-7-features.htmljava 和javafx
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/92341.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!