how2j.cn

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

解压rar如果失败,请用5.21版本或者更高版本的winrar

点击下载 winrar5.21

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

步骤 1 : SpendPage   
步骤 2 : SpendService   
步骤 3 : SpendPanel   
步骤 4 : 运行效果   

增值内容,请先登录
完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
package gui.page; public class SpendPage { //本月消费 public String monthSpend; //今日消费 public String todaySpend; //日均消费 public String avgSpendPerDay; //本月剩余 public String monthAvailable; //日均可用 public String dayAvgAvailable; //距离月末 public String monthLeftDay; //使用比例 public int usagePercentage; //是否超支 public boolean isOverSpend = false; public SpendPage(int monthSpend, int todaySpend, int avgSpendPerDay, int monthAvailable, int dayAvgAvailable, int monthLeftDay, int usagePercentage) { this.monthSpend = "¥" + monthSpend; this.todaySpend = "¥" + todaySpend; this.avgSpendPerDay = "¥" + avgSpendPerDay; if (monthAvailable < 0) isOverSpend = true; if (!isOverSpend) { this.monthAvailable = "¥" + monthAvailable; this.dayAvgAvailable = "¥" + dayAvgAvailable; } else { this.monthAvailable = "超支" + (0 - monthAvailable); this.dayAvgAvailable = "¥0"; } this.monthLeftDay = monthLeftDay + "天"; this.usagePercentage = usagePercentage; } }
增值内容,请先登录
完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
package service; import java.util.List; import dao.RecordDAO; import entity.Record; import gui.page.SpendPage; import util.DateUtil; public class SpendService { public SpendPage getSpendPage() { RecordDAO dao = new RecordDAO(); // 本月数据 List<Record> thisMonthRecords = dao.listThisMonth(); // 今日数据 List<Record> toDayRecords = dao.listToday(); // 本月总天数 int thisMonthTotalDay = DateUtil.thisMonthTotalDay(); int monthSpend = 0; int todaySpend = 0; int avgSpendPerDay = 0; int monthAvailable = 0; int dayAvgAvailable = 0; int monthLeftDay = 0; int usagePercentage = 0; // 预算 int monthBudget = new ConfigService().getIntBudget(); // 统计本月消费 for (Record record : thisMonthRecords) { monthSpend += record.getSpend(); } // 统计今日消费 for (Record record : toDayRecords) { todaySpend += record.getSpend(); } // 计算日均消费 avgSpendPerDay = monthSpend / thisMonthTotalDay; // 计算本月剩余 monthAvailable = monthBudget - monthSpend; // 距离月末 monthLeftDay = DateUtil.thisMonthLeftDay(); // 计算日均可用 dayAvgAvailable = monthAvailable / monthLeftDay; // 计算使用比例 usagePercentage = monthSpend * 100 / monthBudget; // 根据这些信息,生成SpendPage对象 return new SpendPage(monthSpend, todaySpend, avgSpendPerDay, monthAvailable, dayAvgAvailable, monthLeftDay, usagePercentage); } }
增值内容,请先登录
完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
SpendPanel
package gui.panel; import static util.GUIUtil.setColor; import static util.GUIUtil.showPanel; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Font; import java.awt.GridLayout; import javax.swing.JLabel; import javax.swing.JPanel; import gui.page.SpendPage; import service.SpendService; import util.CircleProgressBar; import util.ColorUtil; public class SpendPanel extends WorkingPanel { public static SpendPanel instance = new SpendPanel(); JLabel lMonthSpend = new JLabel("本月消费"); JLabel lTodaySpend = new JLabel("今日消费"); JLabel lAvgSpendPerDay = new JLabel("日均消费"); JLabel lMonthLeft = new JLabel("本月剩余"); JLabel lDayAvgAvailable = new JLabel("日均可用"); JLabel lMonthLeftDay = new JLabel("距离月末"); JLabel vMonthSpend = new JLabel("¥2300"); JLabel vTodaySpend = new JLabel("¥25"); JLabel vAvgSpendPerDay = new JLabel("¥120"); JLabel vMonthAvailable = new JLabel("¥2084"); JLabel vDayAvgAvailable = new JLabel("¥389"); JLabel vMonthLeftDay = new JLabel("15天"); CircleProgressBar bar; public SpendPanel() { this.setLayout(new BorderLayout()); bar = new CircleProgressBar(); bar.setBackgroundColor(ColorUtil.blueColor); setColor(ColorUtil.grayColor, lMonthSpend, lTodaySpend, lAvgSpendPerDay, lMonthLeft, lDayAvgAvailable, lMonthLeftDay, vAvgSpendPerDay, vMonthAvailable, vDayAvgAvailable, vMonthLeftDay); setColor(ColorUtil.blueColor, vMonthSpend, vTodaySpend); vMonthSpend.setFont(new Font("微软雅黑", Font.BOLD, 23)); vTodaySpend.setFont(new Font("微软雅黑", Font.BOLD, 23)); this.add(center(), BorderLayout.CENTER); this.add(south(), BorderLayout.SOUTH); } private JPanel center() { JPanel p = new JPanel(); p.setLayout(new BorderLayout()); p.add(west(), BorderLayout.WEST); p.add(east()); return p; } private Component east() { return bar; } private Component west() { JPanel p = new JPanel(); p.setLayout(new GridLayout(4, 1)); p.add(lMonthSpend); p.add(vMonthSpend); p.add(lTodaySpend); p.add(vTodaySpend); return p; } private JPanel south() { JPanel p = new JPanel(); p.setLayout(new GridLayout(2, 4)); p.add(lAvgSpendPerDay); p.add(lMonthLeft); p.add(lDayAvgAvailable); p.add(lMonthLeftDay); p.add(vAvgSpendPerDay); p.add(vMonthAvailable); p.add(vDayAvgAvailable); p.add(vMonthLeftDay); return p; } public static void main(String[] args) { showPanel(SpendPanel.instance); } @Override public void updateData() { SpendPage spend = new SpendService().getSpendPage(); vMonthSpend.setText(spend.monthSpend); vTodaySpend.setText(spend.todaySpend); vAvgSpendPerDay.setText(spend.avgSpendPerDay); vMonthAvailable.setText(spend.monthAvailable); vDayAvgAvailable.setText(spend.dayAvgAvailable); vMonthLeftDay.setText(spend.monthLeftDay); bar.setProgress(spend.usagePercentage); if (spend.isOverSpend) { vMonthAvailable.setForeground(ColorUtil.warningColor); vMonthSpend.setForeground(ColorUtil.warningColor); vTodaySpend.setForeground(ColorUtil.warningColor); } else { vMonthAvailable.setForeground(ColorUtil.grayColor); vMonthSpend.setForeground(ColorUtil.blueColor); vTodaySpend.setForeground(ColorUtil.blueColor); } bar.setForegroundColor(ColorUtil.getByPercentage(spend.usagePercentage)); addListener(); } @Override public void addListener() { // TODO Auto-generated method stub } }
增值内容,请先登录
完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
运行效果


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


问答区域    
2023-07-01 请问站长,updateData是在哪里调用的
二手玫瑰江小北

请问站长,updateData是在哪里调用的,看不到调用的地方也效果呢




2 个答案

二手玫瑰江小北
答案时间:2023-07-02
找到了,原来在这里,麻了 if (p instanceof WorkingPanel) ((WorkingPanel) p).updateData();

二手玫瑰江小北
答案时间:2023-07-01
搞了一个测试类,确实不用写调用也行,为啥呀



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




2020-05-16 !!!!!!!!!!!!!
莱维贝贝




请问这是因为什么?

							
"C:\Program Files\Java\jdk-13\bin\java.exe" "-javaagent:E:\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=56190:E:\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\Administrator\Desktop\jh\文档源码\项目\javase\out\production\myideaproject;E:\mysql-connector-java-5.1.47\mysql-connector-java-5.1.47\mysql-connector-java-5.1.47-bin.jar;C:\Users\Administrator\.IntelliJIdea2019.3\config\javascript\extLibs\http_code.jquery.com_jquery-3.3.1.js;C:\Users\Administrator\.IntelliJIdea2019.3\config\javascript\extLibs\http_cdn.jsdelivr.net_npm_vue_dist_vue.js;E:\FIREFOX\liquidlnf.jar;E:\FIREFOX\chart.jar;E:\FIREFOX\swingx-core-1.6.2.jar how2jproject.startup.Bootstrap
Exception in thread "main" java.lang.reflect.InvocationTargetException
	at java.desktop/java.awt.EventQueue.invokeAndWait(EventQueue.java:1367)
	at java.desktop/java.awt.EventQueue.invokeAndWait(EventQueue.java:1342)
	at java.desktop/javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1480)
	at how2jproject.startup.Bootstrap.main(Bootstrap.java:13)
Caused by: java.lang.ArithmeticException: / by zero
	at how2jproject.service.SpendService.getSpendPage(SpendService.java:53)
	at how2jproject.gui.panel.SpendPanel.updateData(SpendPanel.java:96)
	at how2jproject.util.CenterPanel.show(CenterPanel.java:48)
	at how2jproject.startup.Bootstrap$1.run(Bootstrap.java:17)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:303)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Process finished with exit code 0


1 个答案

how2j
答案时间:2020-05-20
你的 SpendService.java:53 53行,除数是0导致的。



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





2019-06-21 完犊子,界面不见了
2019-03-20 关于日均消费
2019-03-19 这里运行出现错误。。代码都是一样。不知道哪里错误了


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

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

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

上传截图