how2j.cn

下载区
文件名 文件大小
请先登录 2m
增值内容 2m
2m

5分46秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器

步骤 1 : ReportService   
步骤 2 : ChartUtil   
步骤 3 : ReportPanel   
步骤 4 : 界面效果   

增值内容,请先登录
完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
package service; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import dao.RecordDAO; import entity.Record; import util.DateUtil; public class ReportService { /** * 获取某一天的消费金额 * @param d * @param monthRawData * @return */ public int getDaySpend(Date d,List<Record> monthRawData){ int daySpend = 0; for (Record record : monthRawData) { if(record.date.equals(d)) daySpend+=record.spend; } return daySpend; } /** * 获取一个月的消费记录集合 * @return */ public List<Record> listThisMonthRecords() { RecordDAO dao= new RecordDAO(); List<Record> monthRawData= dao.listThisMonth(); List<Record> result= new ArrayList<>(); Date monthBegin = DateUtil.monthBegin(); int monthTotalDay = DateUtil.thisMonthTotalDay(); Calendar c = Calendar.getInstance(); for (int i = 0; i < monthTotalDay; i++) { Record r = new Record(); c.setTime(monthBegin); c.add(Calendar.DATE, i); Date eachDayOfThisMonth=c.getTime() ; int daySpend = getDaySpend(eachDayOfThisMonth,monthRawData); r.spend=daySpend; result.add(r); } return result; } }
增值内容,请先登录
完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
package util; import java.awt.Color; import java.awt.Font; import java.awt.Image; import java.util.List; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; import com.objectplanet.chart.BarChart; import com.objectplanet.chart.Chart; import entity.Record; public class ChartUtil { private static String[] sampleLabels(List<Record> rs) { String[] sampleLabels = new String[rs.size()]; for (int i = 0; i < sampleLabels.length; i++) { if (0 == i % 5) sampleLabels[i] = String.valueOf(i + 1 + "日"); } return sampleLabels; } public static double[] sampleValues(List<Record> rs) { double[] sampleValues = new double[rs.size()]; for (int i = 0; i < sampleValues.length; i++) { sampleValues[i] = rs.get(i).spend; } return sampleValues; } public static Image getImage(List<Record> rs, int width, int height) { // 根据消费记录得到的样本数据 double[] sampleValues = sampleValues(rs); // 根据消费记录得到的下方日期文本 String[] sampleLabels = sampleLabels(rs); // 样本中的最大值 int max = max(sampleValues); // 数据颜色 Color[] sampleColors = new Color[] { ColorUtil.blueColor }; // 柱状图 BarChart chart = new BarChart(); // 设置样本个数 chart.setSampleCount(sampleValues.length); // 设置样本数据 chart.setSampleValues(0, sampleValues); // 设置文字 chart.setSampleLabels(sampleLabels); // 设置样本颜色 chart.setSampleColors(sampleColors); // 设置取值范围 chart.setRange(0, max * 1.2); // 显示背景横线 chart.setValueLinesOn(true); // 显示文字 chart.setSampleLabelsOn(true); // 把文字显示在下方 chart.setSampleLabelStyle(Chart.BELOW); // 样本值的字体 chart.setFont("rangeLabelFont", new Font("Arial", Font.BOLD, 12)); // 显示图例说明 chart.setLegendOn(true); // 把图例说明放在左侧 chart.setLegendPosition(Chart.LEFT); // 图例说明中的文字 chart.setLegendLabels(new String[] { "月消费报表" }); // 图例说明的字体 chart.setFont("legendFont", new Font("Dialog", Font.BOLD, 13)); // 下方文字的字体 chart.setFont("sampleLabelFont", new Font("Dialog", Font.BOLD, 13)); // 图表中间背景颜色 chart.setChartBackground(Color.white); // 图表整体背景颜色 chart.setBackground(ColorUtil.backgroundColor); // 把图表转换为Image类型 Image im = chart.getImage(width, height); return im; } public static int max(double[] sampleValues) { int max = 0; for (double v : sampleValues) { if (v > max) max = (int) v; } return max; } private static String[] sampleLabels() { String[] sampleLabels = new String[30]; for (int i = 0; i < sampleLabels.length; i++) { if (0 == i % 5) sampleLabels[i] = String.valueOf(i + 1 + "日"); } return sampleLabels; } public static Image getImage(int width, int height) { // 模拟样本数据 double[] sampleValues = sampleValues(); // 下方显示的文字 String[] sampleLabels = sampleLabels(); // 样本中的最大值 int max = max(sampleValues); // 数据颜色 Color[] sampleColors = new Color[] { ColorUtil.blueColor }; // 柱状图 BarChart chart = new BarChart(); // 设置样本个数 chart.setSampleCount(sampleValues.length); // 设置样本数据 chart.setSampleValues(0, sampleValues); // 设置文字 chart.setSampleLabels(sampleLabels); // 设置样本颜色 chart.setSampleColors(sampleColors); // 设置取值范围 chart.setRange(0, max * 1.2); // 显示背景横线 chart.setValueLinesOn(true); // 显示文字 chart.setSampleLabelsOn(true); // 把文字显示在下方 chart.setSampleLabelStyle(Chart.BELOW); // 样本值的字体 chart.setFont("rangeLabelFont", new Font("Arial", Font.BOLD, 12)); // 显示图例说明 chart.setLegendOn(true); // 把图例说明放在左侧 chart.setLegendPosition(Chart.LEFT); // 图例说明中的文字 chart.setLegendLabels(new String[] { "月消费报表" }); // 图例说明的字体 chart.setFont("legendFont", new Font("Dialog", Font.BOLD, 13)); // 下方文字的字体 chart.setFont("sampleLabelFont", new Font("Dialog", Font.BOLD, 13)); // 图表中间背景颜色 chart.setChartBackground(Color.white); // 图表整体背景颜色 chart.setBackground(ColorUtil.backgroundColor); // 把图表转换为Image类型 Image im = chart.getImage(width, height); return im; } private static double[] sampleValues() { double[] result = new double[30]; for (int i = 0; i < result.length; i++) { result[i] = (int) (Math.random() * 300); } return result; } public static void main(String[] args) { JPanel p = new JPanel(); JLabel l = new JLabel(); Image img = ChartUtil.getImage(400, 300); Icon icon = new ImageIcon(img); l.setIcon(icon); p.add(l); GUIUtil.showPanel(p); } }
增值内容,请先登录
完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
package gui.panel; import static util.GUIUtil.showPanel; import java.awt.BorderLayout; import java.awt.Image; import java.util.List; import javax.swing.ImageIcon; import javax.swing.JLabel; import entity.Record; import service.ReportService; import util.ChartUtil; public class ReportPanel extends WorkingPanel { public static ReportPanel instance = new ReportPanel(); JLabel l = new JLabel(); public ReportPanel() { this.setLayout(new BorderLayout()); List<Record> rs = new ReportService().listThisMonthRecords(); Image i = ChartUtil.getImage(rs, 400, 300); ImageIcon icon = new ImageIcon(i); l.setIcon(icon); this.add(l); addListener(); } public static void main(String[] args) { showPanel(ReportPanel.instance); } @Override public void updateData() { List<Record> rs = new ReportService().listThisMonthRecords(); Image i = ChartUtil.getImage(rs, 350, 250); ImageIcon icon = new ImageIcon(i); l.setIcon(icon); } @Override public void addListener() { } }
增值内容,请先登录
完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
界面效果


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2021-04-10 供版本不同的朋友们参考
quan25617600




由于eclipse和MySQL的版本不同,导致ReportService下的record.date.equals(d)判断不成立,可转为String进行比较,请参考代码
//获取一天的消费数据
	public int getDaySpend(Date d,List<Record> monthData) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		String dstring = sdf.format(d);
		int daySpend = 0;
		for(Record day : monthData) {
			String rdate = sdf.format(day.date);
			if(rdate.equals(dstring)) {
			daySpend += day.getSpend();
			}
		}
		return daySpend;
	}

							


1 个答案

how2j
答案时间:2021-04-15
good



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2021-03-20 在java11+mysql8.0.16下遇到的问题
ch141273

1、从数据库中读取的时间与Date获取的时间不一致,需要转成规定格式的String字符串比较 2、需要设置数据库连接为jdbc.url=jdbc:mysql://10.16.93.62:3306/aml?useUnicode=true&autoReconnect=true&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai 否则会导致时间总是-1天




1 个答案

how2j
答案时间:2021-03-20
请用 jdk8和mysql5.5 https://how2j.cn/k/helloworld/helloworld-version/1718.html



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2020-11-20 关于updatedata方法
2020-06-07 采用其他方法生成图表的速度问题
2020-05-22 ChartUtil代码是否有误


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 3 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 实践项目-一本糊涂账-月消费报表 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图