package util;

import java.awt.Component;
import java.awt.Dimension; import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UnsupportedLookAndFeelException; import gui.panel.WorkingPanel; /**
* 居中面板
*
* @author 于修彦
*
*/
public class CenterPanel extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
private double rate; // 比例
private JComponent c; // 面板上将要居中的组件
private boolean stretch;// 是否缩放 public CenterPanel(double rate, boolean stretch) {
this.setLayout(null);
this.rate = rate;
this.stretch = stretch;
} public CenterPanel(double rate) {
this(rate, true);
} /**
* 重写重绘方法,在面板居中显示组件
*/
public void repaint() {
if (this.c != null) {
Dimension containerSize = this.getSize();// 面板大小
Dimension componentSize = this.c.getPreferredSize();// 获取组件调整之后的大小 if (this.stretch) {
// 设置这个组件大小
this.c.setSize((int) (containerSize.width * this.rate), (int) (containerSize.height * this.rate));
} else {
this.c.setSize(componentSize);// 保持原来大小不变
}
// 将组件放到居中位置
this.c.setLocation(containerSize.width / 2 - this.c.getWidth() / 2,
containerSize.height / 2 - this.c.getHeight() / 2); }
super.repaint();
} /**
* 显示组件
*
* @param p
* 组件
*/
public void show(JComponent p) {
this.c = p;
Component[] cs = this.getComponents();
Component[] arrayOfComponent1;
int j = (arrayOfComponent1 = cs).length;
for (int i = 0; i < j; i++) { // 清除面板上原来的组件
Component c = arrayOfComponent1[i];
remove(c);
}
add(p); if ((p instanceof WorkingPanel)) {
((WorkingPanel) p).updateData();
}
updateUI();
}
}

util1

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; /**
* 生成柱状图
*
* @author 于修彦
*
*/
public class ChartUtil {
/**
* 横轴下面的文字
*
* @param rs
* 数据集
* @return 依据数据集生成的文字数组
*/
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; } /**
* 柱状图的柱的数据高度
*
* @param rs
* 数据集
* @return 依据数据集生成的数据数组
*/
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).getSpend();
} return sampleValues;
} /**
* 获取柱状图的图片
*
* @param rs
* 数据集
* @param width
* 宽度
* @param height
* 高度
* @return 结果图
*/
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);
// } }

util2

package util;

import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.SwingWorker; public class CircleProgressBar extends JPanel { private int minimumProgress; private int maximumProgress; private int progress; private String progressText; private Color backgroundColor; private Color foregroundColor; public CircleProgressBar() {
minimumProgress = 0;
maximumProgress = 100;
progressText = "0%";
} public void paint(Graphics g) {
super.paint(g);
Graphics2D graphics2d = (Graphics2D) g;
// 开启抗锯齿
graphics2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
int x = 0;
int y = 0;
int width = 0;
int height = 0;
int fontSize = 0;
if (getWidth() >= getHeight()) {
x = (getWidth() - getHeight()) / 2 + 25;
y = 25;
width = getHeight() - 50;
height = getHeight() - 50;
fontSize = getWidth() / 8;
} else {
x = 25;
y = (getHeight() - getWidth()) / 2 + 25;
width = getWidth() - 50;
height = getWidth() - 50;
fontSize = getHeight() / 8;
}
graphics2d.setStroke(new BasicStroke(20.0f));
graphics2d.setColor(backgroundColor);
graphics2d.drawArc(x, y, width, height, 0, 360);
graphics2d.setColor(foregroundColor);
graphics2d.drawArc(x, y, width, height, 90,
-(int) (360 * ((progress * 1.0) / (maximumProgress - minimumProgress))));
graphics2d.setFont(new Font("黑体", Font.BOLD, fontSize));
FontMetrics fontMetrics = graphics2d.getFontMetrics();
int digitalWidth = fontMetrics.stringWidth(progressText);
int digitalAscent = fontMetrics.getAscent();
graphics2d.setColor(foregroundColor);
graphics2d.drawString(progressText, getWidth() / 2 - digitalWidth / 2, getHeight() / 2 + digitalAscent / 2);
} public int getProgress() {
return progress;
} public void setProgress(int progress) {
if (progress >= minimumProgress && progress <= maximumProgress)
this.progress = progress;
if (progress > maximumProgress)
this.progress = maximumProgress; this.progressText = String.valueOf(progress + "%"); this.repaint();
} public Color getBackgroundColor() {
return backgroundColor;
} public void setBackgroundColor(Color backgroundColor) {
this.backgroundColor = backgroundColor;
this.repaint();
} public Color getForegroundColor() {
return foregroundColor;
} public void setForegroundColor(Color foregroundColor) {
this.foregroundColor = foregroundColor;
this.repaint();
} }

util3

记账本,C,Github,util的更多相关文章

  1. 家庭记账本之Github账号注册与安装(二)

    好多程序猿都在使用github用来存放自己的代码:但是如果仅仅用github的web版本的话:有一些功能还是需要使用git客户端工具才能操作的: 那么今天将指导大家如何安装GitHub for win ...

  2. 家庭记账本之GitHub账号注册与安装(一)

    账号注册 1.github是世纪上最大的开源代码托管网站.因为是国外网站,很多人在注册的时候因为不熟悉英语而犯了难. 2.百度搜索github进入官网.如果你已经有账号密码,那么点击右上角的sign ...

  3. 安卓开发实战-记账本APP(六)

    记账本APP开发---终结篇 昨天的动态数字录屏奉上:在抖音上拍了一个(ps:欢迎点赞) https://v.douyin.com/poEjmG/ 今天将图表的内容进行了制作,我用的是MPChart的 ...

  4. 家庭版记账本app开发完成

    经过这几天关于android的相关学习,对于家庭版记账本app以及开发结束. 实现的功能为:用户的注册.登录.添加支出账单.添加收入账单.显示所有的该用户的账单情况(收入和支出).生产图表(直观的显示 ...

  5. 记账本NABCD分析

    学生记账本NABCD分析 N(Need,需求) 随着我们进入大学开始逐步的扩大自己的消费水平,而我们每天无法准确的记住一笔一笔的消费记录.常常,每一个月末时我们在宿舍楼道听到不少学生抱怨这个月怎么花钱 ...

  6. 记账本APP(2)

    今天下载了Hbuiler,生成了一个记账本APP,目前里面只可以 输入今日消费 明天将会做出来记录以及计算总额于月消费.

  7. 简单记账本APP开发一

    在对Android的一些基础的知识有了一定了解,以及对于AndroidStudio的如何使用有了 一定的熟悉后,决定做一个简单的记账本APP 开发流程 1.记账本的页面 2.可以添加新的账目 (一)页 ...

  8. Android开发实战——记账本(2)

    开发日志(2)——Bean目录以及数据库 首先编写一些自己生成的数据进行测试,看一下能否显示在模拟器上.那前提就是先写出bean目录,这和之前学的Javaweb步骤差不多.bean目录有三个变量事件. ...

  9. 进度1_家庭记账本App

    今天完成了昨天的初步构想,详细介绍见上一篇博客,具体项目结构和案例如下: MainActivity.java: package com.example.familybooks; import andr ...

随机推荐

  1. Js/使用js来改变图片的url

    1.使用js的方式来改变url地址: $('#a1').attr("src","test1.jpg");这种方式来改变图片的url地址: 而不是采用$('#a1 ...

  2. python中类的创建和实例化

    python中同样使用关键字class创建一个类,类名称第一个字母大写,可以带括号也可以不带括号: python中实例化类不需要使用关键字new(也没有这个关键字),类的实例化类似函数调用方式: # ...

  3. Scrapy、Scrapy-redis组件

    目录 Scrapy 一.安装 二.基本使用 1. 基本命令 2.项目结构以及爬虫应用简介 3. 小试牛刀 4. 选择器 5. 格式化处理 6.中间件 7. 自定制命令 8. 自定义扩展 9. 避免重复 ...

  4. pycharm中添加PATH变量

    最近在pycharm中run程序,终端terminal没有问题,在pycharm找不到$PATH中的变量值,如下图所示 同样的命令,在终端敲就没毛病,终端echo $PATH的时候,显示的是有cuda ...

  5. python要开始记录了20181125

    print('1.使用while循环输入 1 2 3 4 5 6 8 9 10') i = 1 while i < 10: i += 1 if i == 7: continue #print(' ...

  6. maven编译错误maven-assembly-plugin:2.2-beta-5:assembly (default-cli) on project

    maven对项目编译时报错 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.2-beta ...

  7. 寒假作业pta2

    7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成"贰万叁仟壹百零捌"元.为了简 ...

  8. Ajax(Asynchronous JavaScript )and xml

    JavaScript的两种任务执行模式--同步(synchronous)和异步(Asynchronous) 同步模式 JavaScript的执行环境是单线程的,意味着一次只能执行一个任务,如果有多个任 ...

  9. 承接AR定制AR项目外包(正规公司,内附案例)

    京团队长年承接AR项目外包 咨询QQ:372900288  微信:liuxiang0884 以下是AR项目案例演示,索取更多案例请通过以上方式在线联系我们

  10. Excel技巧--分隔工资条

    要将上图的工资表,做成每行都带标题而且有空行间隔的工资条,可以这么做: 1.表格右侧添加一列数据列:输入1,2,选定,并双击单元格右下角形成一升序数字列: 2.再将该列复制,粘贴到该列末尾: 3.点一 ...