步骤 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
供版本不同的朋友们参考
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2021-03-20
在java11+mysql8.0.16下遇到的问题
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 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|