本节概要

本节主要讲使用条形图展示数据。

前期准备

由于从本节开始就会用到JavaFX的图表,所以在tools包下创建了ChartTools.java,该类集中了本项目所需要用到创建条形图、折线图及饼图的相关方法,这些方法都是自定义的,不过也可以修改作它用,更多关于JavaFX图表的用法可以参考JavaFX的中文官网。

故ChartTools.java内容如下:

package AccountSystem.tools;
​
import AccountSystem.bean.Session;
import AccountSystem.bean.User;
import AccountSystem.dao.RecordDao;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.chart.*;
​
import java.util.Calendar;
import java.util.Date;
import java.util.List;
​
public class ChartTools {private DateTools dateTools = new DateTools();
​/*** 操作结果:设置条形图的数据根据给定的月数** @param month        给定的月数* @param barChart     条形图* @param categoryAxis X轴* @param numberAxis   Y轴*/public void public_setMonthBarChartData(int month,BarChart<?, ?> barChart,CategoryAxis categoryAxis,NumberAxis numberAxis) {// 实例化RecordDao对象RecordDao recordDao = new RecordDao();// 设置条形图水平轴的标签名称categoryAxis.setLabel("日期");// 设置条形图垂直轴的标签名称numberAxis.setLabel("金额");// 表示“收入”类型XYChart.Series monthInputSeries = new XYChart.Series();// 并设置该类型的名称monthInputSeries.setName("收入");// 表示“支出”类型XYChart.Series monthOutputSeries = new XYChart.Series();// 并设置该类型的名称monthOutputSeries.setName("支出");
​// 清空集合日期标签中的内容categoryAxis.getCategories().clear();// 循环月数,填充数据for (int i = 0; i < month; i++) {// 得到一个Calendar日历对象Calendar calendar = Calendar.getInstance();// 设置时间calendar.setTime(new Date());calendar.add(calendar.MONDAY, -i);Date monthDate = calendar.getTime();// 将monthDate进行格式化处理获取“yyyy-MM-dd”格式String monthStringDate = dateTools.dateFormat(monthDate, "yyyy-MM-dd");// 拼接SQL语句,获取当前日期的收入总额String monthInputsql = "select SUM(rMoney) from tb_records where rType='收入' and MONTH(rDate)= MONTH('" + monthStringDate + "') and uId=" + Session.getUser().getUserId() + ";";// 拼接SQL语句,获取当前日期的支出总额String monthOutputsql = "select SUM(rMoney) from tb_records where rType='支出' and MONTH(rDate)= MONTH('" + monthStringDate + "') and uId=" + Session.getUser().getUserId() + ";";// 执行收入SQL语句查询得到收入总额float monthInput = recordDao.getResultValueBySql(monthInputsql);// 执行支出SQL语句查询得到支出总额float monthOutput = recordDao.getResultValueBySql(monthOutputsql);// 为水平轴添加时间标签categoryAxis.getCategories().add(monthStringDate);// 填充“收入”类型的数据monthInputSeries.getData().add(new XYChart.Data<>(dateTools.dateFormat(dateTools.stringToDate(monthStringDate, "yyyy-MM-dd"), "yyyy-MM"), monthInput));// 填充“支出”类型的数据monthOutputSeries.getData().add(new XYChart.Data<>(dateTools.dateFormat(dateTools.stringToDate(monthStringDate, "yyyy-MM-dd"), "yyyy-MM"), monthOutput));}
​// 清除条形图上的所有数据barChart.getData().clear();// 重新填充条形图上的数据barChart.getData().addAll(monthInputSeries, monthOutputSeries);}
​/*** 操作结果:设置条形图的数据根据一年(四季度)** @param barChart     条形图* @param categoryAxis X轴* @param numberAxis   Y轴*/public void public_setSeasonBarChartData(BarChart<?, ?> barChart,CategoryAxis categoryAxis,NumberAxis numberAxis) {// 设置条形图水平轴的标签categoryAxis.setLabel("日期");// 设置条形图垂直轴的标签numberAxis.setLabel("金额");// 设置条形图“收入”类型XYChart.Series seasonInputSeries = new XYChart.Series();// 设置条形图“收入”类型的名称seasonInputSeries.setName("收入");// 设置条形图“支出”类型XYChart.Series seasonOutputSeries = new XYChart.Series();// 设置条形图“支出”类型的名称seasonOutputSeries.setName("支出");
​// 清空集合日期标签中的内容categoryAxis.getCategories().clear();// 获取一年四季度的所有开始日期和结束日期List<Date[]> list = dateTools.getYearQuarterList(new Date());// 循环遍历日期for (int i = 0; i < list.size(); i++) {// 将开始日期和结束日期格式化处理并拼接标签String strDate = dateTools.dateFormat(list.get(i)[0], "yyyy-MM-dd") + "-" + dateTools.dateFormat(list.get(i)[1], "yyyy" + "-MM-dd");// 为水平轴的每条数据添加标签categoryAxis.getCategories().add(strDate);// 获取一季度的收入总额String seasonInputSql = "select SUM(rMoney) from tb_records where rType='收入' and rDate between '" + dateTools.dateFormat(list.get(i)[0], "yyyy-MM-dd") + "' and '" + dateTools.dateFormat(list.get(i)[1], "yyyy-MM-dd") + "' and uId=" + Session.getUser().getUserId();// 获取一季度的支出总额String seasonOutpuSql = "select SUM(rMoney) from tb_records where rType='支出' and rDate between '" + dateTools.dateFormat(list.get(i)[0], "yyyy-MM-dd") + "' and '" + dateTools.dateFormat(list.get(i)[1], "yyyy-MM-dd") + "' and uId=" + Session.getUser().getUserId();// 执行一季度的收入总额的SQL语句获取收入总额float seasonInput = new RecordDao().getResultValueBySql(seasonInputSql);// 执行一季度的支出总额的SQL语句获取支出总额float seasonOutput = new RecordDao().getResultValueBySql(seasonOutpuSql);// 将数据填充到“收入”类型的条形图中seasonInputSeries.getData().add(new XYChart.Data<>(strDate, seasonInput));// 将数据填充到“支出”类型的条形图中seasonOutputSeries.getData().add(new XYChart.Data<>(strDate, seasonOutput));}// 清除条形图上的数据barChart.getData().clear();// 重新为条形图填充数据barChart.getData().addAll(seasonInputSeries, seasonOutputSeries);}
​/*** 操作结果:设置条形图的数据根据给定的天数** @param day          给定的天数* @param barChart     条形图* @param categoryAxis X轴* @param numberAxis   Y轴*/public void public_setBarChartData(int day, BarChart<?, ?> barChart,CategoryAxis categoryAxis,NumberAxis numberAxis) {// 设置水平轴的标签categoryAxis.setLabel("日期");// 设置垂直轴的标签numberAxis.setLabel("金额");// 实例化XYChart.Series对象添加收入数据XYChart.Series inputSeries = new XYChart.Series();// 设置名称inputSeries.setName("收入");// 实例化XYChart.Series对象添加支出数据XYChart.Series outputSeries = new XYChart.Series();// 设置名称outputSeries.setName("支出");
​// 清空集合日期标签中的内容categoryAxis.getCategories().clear();// 循环天数,绘制每一天的条形图for (int i = 0; i < day; i++) {// 获取日历对象Calendar calendar = Calendar.getInstance();calendar.add(Calendar.DATE, -i);Date calendarTime = calendar.getTime();// 将日期格式化String date = dateTools.dateFormat(calendarTime, "yyyy-MM-dd");// 拼接每天的收入SQL语句String dateInputsql = "select SUM(rMoney) from tb_records where rType='收入' and rDate= '" + date + "' and " + " uId=" + Session.getUser().getUserId() + ";";// 拼接每天的支出SQL语句String dateOutputsql = "select SUM(rMoney) from tb_records where rType='支出' and rDate= '" + date + "' and " + " uId=" + Session.getUser().getUserId() + ";";// 执行SQL语句,获取每天的收入总额float dateInput = new RecordDao().getResultValueBySql(dateInputsql);// 执行SQL语句,获取每天的支出总额float dateOutput = new RecordDao().getResultValueBySql(dateOutputsql);// 为水平轴添加每天的日期标签categoryAxis.getCategories().add(date);// 将收入数据添加到收入条形图inputSeries.getData().add(new XYChart.Data<>(date, dateInput));// 将支出数据添加到支出条形图outputSeries.getData().add(new XYChart.Data<>(date, dateOutput));}
​// 清空条形图上的数据barChart.getData().clear();// 重新填充条形图上的数据barChart.getData().addAll(inputSeries, outputSeries);}
​/*** 操作结果:设置折线图的数据根据给定的天数** @param day       给定的天数* @param lineChart 折线图*/public void public_setDayLineChartData(int day, LineChart<?, ?> lineChart,CategoryAxis categoryAxis,NumberAxis numberAxis) {// 设置水平轴的标签categoryAxis.setLabel("日期");// 设置垂直轴的标签numberAxis.setLabel("金额");
​// 实例化XYChart.Series对象添加收入数据XYChart.Series inputSeries = new XYChart.Series();// 设置收入名称inputSeries.setName("收入");// 实例化XYChart.Series对象添加支出数据XYChart.Series outputSeries = new XYChart.Series();// 设置支出名称outputSeries.setName("支出");
​// 清空集合日期标签中的内容categoryAxis.getCategories().clear();// 循环天数,填充数据for (int i = 0; i < day; i++) {// 得到日历对象Calendar calendar = Calendar.getInstance();calendar.add(Calendar.DATE, -i);Date calendarTime = calendar.getTime();// 将日期格式化String date = dateTools.dateFormat(calendarTime, "yyyy-MM-dd");// 拼接每天收入总额的SQL语句String dateInputsql = "select SUM(rMoney) from tb_records where rType='收入' and rDate= '" + date + "' and uId=" + Session.getUser().getUserId() + ";";// 拼接每天支出总额的SQL语句String dateOutputsql = "select SUM(rMoney) from tb_records where rType='支出' and rDate= '" + date + "' and uId=" + Session.getUser().getUserId() + ";";// 执行SQL语句获取每天收入总额float dateInput = new RecordDao().getResultValueBySql(dateInputsql);// 执行SQL语句获取每天支出总额Object dateOutput = new RecordDao().getResultValueBySql(dateOutputsql);// 添加收入数据inputSeries.getData().add(new XYChart.Data<>(date, dateInput));// 添加支出数据outputSeries.getData().add(new XYChart.Data<>(date, dateOutput));}
​// 清空折线图上的数据lineChart.getData().clear();// 重新为折线图填充数据lineChart.getData().addAll(inputSeries, outputSeries);}
​/*** 操作结果:设置折线图的数据根据给定的月数** @param month     给定的月数* @param lineChart 折线图*/public void public_setMonthLineChartData(int month, LineChart lineChart, CategoryAxis categoryAxis,NumberAxis numberAxis) {categoryAxis.setLabel("日期");numberAxis.setLabel("金额");
​XYChart.Series monthInputSeries = new XYChart.Series();monthInputSeries.setName("收入");
​XYChart.Series monthOutputSeries = new XYChart.Series();monthOutputSeries.setName("支出");
​// 清空集合日期标签中的内容categoryAxis.getCategories().clear();for (int i = 0; i < month; i++) {Calendar calendar = Calendar.getInstance();calendar.setTime(new Date());calendar.add(calendar.MONDAY, -i);Date monthDate = calendar.getTime();String monthStringDate = dateTools.dateFormat(monthDate, "yyyy-MM-dd");String monthInputsql = "select SUM(rMoney) from tb_records where rType='收入' and MONTH(rDate)= MONTH('" + monthStringDate + "') and uId=" + Session.getUser().getUserId() + ";";String monthOutputsql = "select SUM(rMoney) from tb_records where rType='支出' and MONTH(rDate)= MONTH('" + monthStringDate + "') and uId=" + Session.getUser().getUserId() + ";";float monthInput = new RecordDao().getResultValueBySql(monthInputsql);float monthOutput = new RecordDao().getResultValueBySql(monthOutputsql);monthInputSeries.getData().add(new XYChart.Data<>(dateTools.dateFormat(monthDate, "yyyy-MM"), monthInput));monthOutputSeries.getData().add(new XYChart.Data<>(dateTools.dateFormat(monthDate, "yyyy-MM"), monthOutput));}
​lineChart.getData().clear();lineChart.getData().addAll(monthInputSeries, monthOutputSeries);}
​/*** 操作结果:设置折线图的数据根据给定的年(四个季度)** @param lineChart    折线图* @param categoryAxis X轴* @param numberAxis   Y轴*/public void public_setSeasonLineChartData(LineChart lineChart, CategoryAxis categoryAxis,NumberAxis numberAxis) {categoryAxis.setLabel("日期");numberAxis.setLabel("金额");XYChart.Series seasonInputSeries = new XYChart.Series();seasonInputSeries.setName("收入");
​XYChart.Series seasonOutputSeries = new XYChart.Series();seasonOutputSeries.setName("支出");
​// 清空集合日期标签中的内容categoryAxis.getCategories().clear();List<Date[]> list = dateTools.getYearQuarterList(new Date());for (int i = 0; i < list.size(); i++) {String strDate = dateTools.dateFormat(list.get(i)[0], "yyyy-MM-dd") + "-" + dateTools.dateFormat(list.get(i)[1], "yyyy-MM-dd");categoryAxis.getCategories().add(strDate);String seasonInputSql = "select SUM(rMoney) from tb_records where rType='收入' and rDate between '" + dateTools.dateFormat(list.get(i)[0], "yyyy-MM-dd") + "' and '" + dateTools.dateFormat(list.get(i)[1], "yyyy-MM-dd") + "' and uId=" + Session.getUser().getUserId();String seasonOutputSql = "select SUM(rMoney) from tb_records where rType='支出' and rDate between '" + dateTools.dateFormat(list.get(i)[0], "yyyy-MM-dd") + "' and '" + dateTools.dateFormat(list.get(i)[1], "yyyy-MM-dd") + "' and uId=" + Session.getUser().getUserId();float seasonInput = new RecordDao().getResultValueBySql(seasonInputSql);float seasonOutput = new RecordDao().getResultValueBySql(seasonOutputSql);seasonInputSeries.getData().add(new XYChart.Data<>(strDate, seasonInput));seasonOutputSeries.getData().add(new XYChart.Data<>(strDate, seasonOutput));}lineChart.getData().clear();lineChart.getData().addAll(seasonInputSeries, seasonOutputSeries);}
​/*** 操作结果:设置饼图的数据根据起始日期和终止日期** @param user      用户对象* @param pieChart  饼图* @param startDate 起止日期* @param endDate   终止日期*/public void public_setDayPieChartData(User user, PieChart pieChart, Date startDate, Date endDate) {// 将开始日期格式化处理String thisStartDate = dateTools.dateFormat(startDate, "yyyy-MM-dd");// 将结束日期格式化处理String thisEndDate = dateTools.dateFormat(endDate, "yyyy-MM-dd");// 拼接收入总额SQL语句String thisInputsql = "select SUM(rMoney) from tb_records where rType='收入' and rDate between '" + thisStartDate + "'" + " " + "and " + "'" + thisEndDate + "' and uId=" + user.getUserId() + ";";// 拼接支出总额SQL语句String thisOutputsql = "select SUM(rMoney) from tb_records where rType='支出' and rDate between '" + thisStartDate + "'" + " " + "and " + "'" + thisEndDate + "' and uId=" + user.getUserId() + ";";// 执行SQL语句获取收入总额float thisInput = new RecordDao().getResultValueBySql(thisInputsql);// 执行SQL语句获取支出总额float thisOutput = new RecordDao().getResultValueBySql(thisOutputsql);// 填充数据到ObservableList集合中ObservableList observableList = FXCollections.observableArrayList(new PieChart.Data("收入", thisInput),new PieChart.Data("支出", thisOutput));
​// 顺时针设置饼图的切片pieChart.setClockwise(true);// 方法设置标签行的长度pieChart.setLabelLineLength(50);// 将饼图的标签设置为可见pieChart.setLabelsVisible(true);// 设置饼图的起始角度pieChart.setStartAngle(180);
​// 清空饼图的数据pieChart.getData().clear();// 填充数据集合到饼图中pieChart.setData(observableList);}
​/*** 操作结果:设置饼图的数据根据给定的天数** @param user     用户对象* @param day      给定的天数* @param pieChart 饼图* @param type     账目类型,收入或支出*/public void public_setWeekPieChartData(User user, int day, PieChart pieChart, String type) {// 实例化RecordDao对象RecordDao recordDao = new RecordDao();// 创建ObservableList集合ObservableList observableList = FXCollections.observableArrayList();// 循环遍历天数for (int i = 0; i < day; i++) {Calendar calendar = Calendar.getInstance();calendar.add(Calendar.DATE, -i);Date calendarTime = calendar.getTime();String date = dateTools.dateFormat(calendarTime, "yyyy-MM-dd");String dateInputsql = "select SUM(rMoney) from tb_records where rType='" + type + "' and rDate= '" + date + "' and " + "uId=" + user.getUserId() + ";";float dateInput = recordDao.getResultValueBySql(dateInputsql);observableList.add(new PieChart.Data(date, dateInput));}
​// 设置饼图的标题pieChart.setTitle("饼图");// 顺时针设置饼图的切片pieChart.setClockwise(true);// 方法设置标签行的长度pieChart.setLabelLineLength(50);// 将饼图的标签设置为可见pieChart.setLabelsVisible(true);// 设置饼图的起始角度pieChart.setStartAngle(180);
​pieChart.getData().clear();pieChart.setData(observableList);}
​/*** 操作结果:设置饼图的数据根据给定的月数** @param month    给定的月数* @param pieChart 饼图* @param type     指定账目类型,收入或支出*/public void public_setMonthPieChartData(User user, int month, PieChart pieChart, String type) {// 实例化RecordDao对象RecordDao recordDao = new RecordDao();// 获取ObservableList集合对象ObservableList observableList = FXCollections.observableArrayList();for (int i = 0; i < month; i++) {Calendar calendar = Calendar.getInstance();calendar.setTime(new Date());calendar.add(calendar.MONDAY, -i);Date monthDate = calendar.getTime();String monthStringDate = dateTools.dateFormat(monthDate, "yyyy-MM");String monthsql = "select SUM(rMoney) from tb_records where rType='" + type + "' and MONTH(rDate)= MONTH" + "('" + dateTools.dateFormat(monthDate, "yyyy-MM-dd") + "') and uId=" + user.getUserId() + ";";Object monthResult = recordDao.getResultValueBySql(monthsql);observableList.add(new PieChart.Data(monthStringDate, (Float) monthResult));}
​// 设置饼图的标题pieChart.setTitle("饼图");// 顺时针设置饼图的切片pieChart.setClockwise(true);// 方法设置标签行的长度pieChart.setLabelLineLength(50);// 将饼图的标签设置为可见pieChart.setLabelsVisible(true);// 设置饼图的起始角度pieChart.setStartAngle(180);
​pieChart.getData().clear();pieChart.setData(observableList);}
​/*** 操作结果:设置饼图的数据根据季度** @param pieChart 饼图* @param type     指定类型*/public void public_setSeasonPieChartData(User user, PieChart pieChart, String type) {ObservableList observableList = FXCollections.observableArrayList();List<Date[]> list = dateTools.getYearQuarterList(new Date());for (int i = 0; i < list.size(); i++) {String strDate = dateTools.dateFormat(list.get(i)[0], "yyyy-MM-dd") + "-" + dateTools.dateFormat(list.get(i)[1], "yyyy-MM-dd");String seasonSql = "select SUM(rMoney) from tb_records where rType='" + type + "' and rDate between '" + dateTools.dateFormat(list.get(i)[0], "yyyy-MM-dd") + "' and '" + dateTools.dateFormat(list.get(i)[1], "yyyy-MM-dd") + "' and uId=" + user.getUserId() + ";";Object season = new RecordDao().getResultValueBySql(seasonSql);observableList.add(new PieChart.Data(strDate, (Float) season));}
​// 设置饼图的标题pieChart.setTitle("饼图");// 顺时针设置饼图的切片pieChart.setClockwise(true);// 方法设置标签行的长度pieChart.setLabelLineLength(50);// 将饼图的标签设置为可见pieChart.setLabelsVisible(true);// 设置饼图的起始角度pieChart.setStartAngle(180);
​pieChart.getData().clear();pieChart.getData().addAll(observableList);}
}

创建界面

创建条形图显示界面,在view包下新建barChartFrame.fxml文件,使用Scene Builder设计界面,各个控件的属性和事件方法参考下面的代码:

<?xml version="1.0" encoding="UTF-8"?>
​
<?import javafx.scene.chart.BarChart?>
<?import javafx.scene.chart.CategoryAxis?>
<?import javafx.scene.chart.NumberAxis?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<AnchorPane prefHeight="800.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"fx:controller="AccountSystem.controller.BarChartFrameController"><children><HBox alignment="CENTER" prefHeight="68.0" prefWidth="800.0"><children><ComboBox fx:id="barChart_comboBox" onAction="#barChart_comboBoxEvent" promptText="请选择日期"/></children></HBox><ScrollPane fitToHeight="true" fitToWidth="true" layoutY="74.0" prefHeight="725.0" prefWidth="800.0"><content><BarChart fx:id="barChart" prefHeight="727.0" prefWidth="799.0"><xAxis><CategoryAxis fx:id="categoryAxis" side="BOTTOM"/></xAxis><yAxis><NumberAxis fx:id="numberAxis" side="LEFT"/></yAxis></BarChart></content></ScrollPane></children>
</AnchorPane>

接着是在controller包下创建对应的控制器类BarChartFrameController.java,从Scene Builder中复制该界面的组件对象和事件方法代码到该控制器类中:

package AccountSystem.controller;
​
import AccountSystem.tools.ChartTools;
import AccountSystem.tools.PublicTools;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.control.ComboBox;
​
import java.util.Calendar;
​
/*** 条形图界面控制器** @author lck100*/
public class BarChartFrameController {private ChartTools chartTools = new ChartTools();private PublicTools publicTools = new PublicTools();
​@FXMLprivate CategoryAxis categoryAxis;
​@FXMLprivate BarChart<?, ?> barChart;
​@FXMLprivate ComboBox<?> barChart_comboBox;
​@FXMLprivate NumberAxis numberAxis;
​
​/*** 下拉列表框事件处理** @param event 事件*/public void barChart_comboBoxEvent(ActionEvent event) {}
}

再接着就是这一FXML资源文件啊,所以继续在MainApp.java中写加载方法:

    /*** 操作结果:“条形图”查询结果界面*/public Scene initBarChart() {try {Parent page = FXMLLoader.load(getClass().getResource("view/barChartFrame.fxml"));
​Stage mainFrameStage = new Stage();mainFrameStage.setTitle("条形图");mainFrameStage.setResizable(true);mainFrameStage.setAlwaysOnTop(false);mainFrameStage.initModality(Modality.APPLICATION_MODAL);mainFrameStage.initOwner(primaryStage);Scene scene = new Scene(page);mainFrameStage.setScene(scene);
​mainFrameStage.showAndWait();return scene;} catch (IOException e) {e.printStackTrace();}return null;}

最后是在菜单项中进行调用在MainPageController.java类中:

    /*** ”条形图“菜单项的事件监听器** @param actionEvent 事件*/@FXMLpublic void barChartMenuItemEvent(ActionEvent actionEvent) {// 打开条形图界面mainApp.initBarChart();}

运行程序,查看界面:

实现功能

要实现通过下拉列表框来选择不同的选项来绘制不同的条形图,所以首先要为下拉列表框填充选项,接着为下拉列表框选项注册事件监听器,即选中的不同的日期就绘制不同的条形图。

即初始化下拉列表框选项的代码如下:

    /*** 初始化界面*/public void initialize() {// 初始化填充下拉列表框选项String[] items = new String[]{"今天", "昨天", "最近3天", "最近7天", "最近30天", "最近1年(12月)", "最近1年(4季度)"};publicTools.public_addComboBoxItems(barChart_comboBox, items);}

运行查看即是:

接着是监听下拉列表框选项的事件:

    /*** 下拉列表框事件处理** @param event 事件*/public void barChart_comboBoxEvent(ActionEvent event) {// 获取下拉列表框选中项String selectedCoboboxItem = (String) barChart_comboBox.getSelectionModel().selectedItemProperty().getValue();// 对下拉列表框选中项进行处理switch (selectedCoboboxItem) {case "今天":chartTools.public_setBarChartData(1, barChart, categoryAxis, numberAxis);break;case "昨天":chartTools.public_setBarChartData(2, barChart, categoryAxis, numberAxis);break;case "最近3天":chartTools.public_setBarChartData(3, barChart, categoryAxis, numberAxis);break;case "最近7天":chartTools.public_setBarChartData(7, barChart, categoryAxis, numberAxis);break;case "最近30天":chartTools.public_setBarChartData(30, barChart, categoryAxis, numberAxis);break;case "最近1年(12月)":Calendar calendar = Calendar.getInstance();int month = calendar.get(Calendar.MONDAY) + 1;chartTools.public_setMonthBarChartData(month, barChart, categoryAxis, numberAxis);break;case "最近1年(4季度)":chartTools.public_setSeasonBarChartData(barChart, categoryAxis, numberAxis);break;default:break;}}

可以看到上面的代码很简洁,因为都是调用了ChartTools.java类中的方法,这些方法都是自定义封装的,这些代码才是核心的,所以如果要想绘制条形图需要去看该类中的代码,每一个方法都有注释说明,如果是更详细的教程还是要参照官网学习。

运行代码测试功能:

可搜索微信公众号【Java实例程序】或者扫描下方二维码关注公众号获取更多。

注意:在公众号后台回复【20200411】可获取本章的源码。

Java实战之管家婆记账系统(16)——条形图展示数据界面及功能实现相关推荐

  1. Java实战之管家婆记账系统(5)——主界面及功能实现

    本节概要 本节将实现主界面,即在登录成功后显示的主界面,将显示用户的收入支出余额信息及在右边的面板中以表格的形式显示所有的收入支出记录. 前期准备 由于需要使用表格显示记录数据,所以需要使用到实体类来 ...

  2. Java实战之管家婆记账系统(6)——导入和导出功能实现

    本节概要 本节将实现将用户的收入和支出记录导出到excel表中,也可以从excel中导入到管家婆记账系统中. 导出 将用户的记录导出到excel表中,导出功能的实现不需要界面,是通过菜单项进行触发的事 ...

  3. Java实战之管家婆记账系统(4)——用户注册及登录功能实现

    首先使用IDEA创建一个普通的JavaFX项目,并按照下图创建文件夹. 接着是引入要使用的第三方包,需要用到的包在file文件夹下的jar包中,引入即可. 在引入成功后,数据库表的创建已经在第二节文章 ...

  4. Java实战之管家婆记账系统(22)——实现修改软件主题皮肤功能

    本节概要 本节实现修改界面皮肤的功能,即使整个程序应用不同的CSS样式. 实现功能 关于软件不同的皮肤要能保存起来,即在软件关闭后再次重启也能显示改变的皮肤,因此需要将其保存在电脑本地,所以在prop ...

  5. Java实战之管家婆记账系统(8)——添加账目界面及功能实现

    本节概要 本节将实现账目记录的添加. 前期准备 在本节中实现记录的添加将用到分类信息的查询,所以在dao包下创建ClassificationDao.java类,代码如下: package Accoun ...

  6. Java实战之管家婆记账系统(7)——备份、恢复和退出功能实现

    本节概要 本节将实现数据库记录的备份.恢复功能和软件的退出. 备份功能 备份功能同样是在MainPageController.java中的backupMenuItemEvent()方法所触发的,即事件 ...

  7. java连接mongodb的jar包_Java实战之管家婆记账系统(1)——项目简述

    项目简述: 该项目是一个通过JavaFX实现的管家婆记账系统,具有记账的功能. 使用软件: IntelliJ IDEA 2018.3.5(Ultim ate Edition):编写Java项目代码. ...

  8. java计算机毕业设计家庭记账系统源程序+mysql+系统+lw文档+远程调试

    java计算机毕业设计家庭记账系统源程序+mysql+系统+lw文档+远程调试 java计算机毕业设计家庭记账系统源程序+mysql+系统+lw文档+远程调试 本源码技术栈: 项目架构:B/S架构 开 ...

  9. java毕业设计家庭理财记账系统mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计家庭理财记账系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计家庭理财记账系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S ...

  10. Power BI动态条形图展示数据趋势(头条、抖音常见)

    在头条.抖音等短视频平台,经常看见使用条形图展示数据变化趋势的视频,比如展示各国GDP变化,各地楼价变化,各地工资变化等等.其实使用Power BI不用十分钟就能完成制作. 一.本例原始数据 原始数据 ...

最新文章

  1. 【6年开源路】海王星给你好看!FineUI v4.0正式版暨《FineUI3to4一键升级工具》发布!...
  2. 一切都是问题,一切都着落在自身
  3. 语言const的生命周期_C语言的角落——这些C语言不常用的特性你知道吗?
  4. 【机器学习基础】数学推导+纯Python实现机器学习算法3:k近邻
  5. Monkey测试com.android.browser 发 生类似android.datab
  6. 手动挡五个档位示意图_汽车档位越多越好?听听专业回答
  7. Bootstrap分页功能
  8. centen os7 安装并配置Nexus3.9.0
  9. AWS SageMaker 基于Random Cut Forest 的异常值检测 随机森林
  10. java 同步和异步_Java中的同步与异步详细介绍
  11. rake matlab,基于MATLABRake接收机仿真及性能分析.doc
  12. 微信小程序自定义tabbar 图标凸出效果
  13. 王菲微博“逗贫”语录暴光
  14. 手机app邮箱如何和学校邮箱自动同步
  15. LTE信令流程——位置更新
  16. k-means 的原理,优缺点以及改进
  17. mssql查询分页存储过程SpPageOrder/proc_wuhan_getpages )
  18. python中的set是什么意思_python中的set是什么
  19. 转】Dolby TrueHD 、DTS-HD MA和LPCM比较解析!!
  20. 移除集合效率高还是add高_HashMap存取效率高原因、ArrayList和LinkedList区别、JAVA实现链表的基本功能...

热门文章

  1. yuzu 使用指南:如何在 PC 上运行 Switch 游戏
  2. ucgui 嵌入式 输入法 包含拼音、笔画、英文、数字与符号的完整输入法软件
  3. 华为网络技术大赛笔记——数据库基础原理
  4. 如何正确的获得一个view的宽和高
  5. HTTP协议简单概述
  6. CCS的c语言编程,CCS_C语言编程
  7. rake matlab,[MATLAB毕业设计] rake 仿真程序 求助
  8. 好用的服务器终端,推荐7款超级好用的终端工具 —— SSH+FTP
  9. Windows 2003超级终端
  10. C语言ssh软件,如何在C语言程序中使用SSH。