下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、java 柱状图和饼状图的动态实现import java.awt.*;import javax.swing.*;importjava.util.List;import java.util.ArrayList;importjava.util.Random;import java.lang.Math;public class Part extends JFrame public Part()this.setTitle(java 图形程序设计 );this.setSize(this.WIDTH,this.HEIGHT);this.setLocation(dim.width -this.WIDTH)
2、/ 2, this.HEIGHT) / 2);this.setDefaultCloseOperation(this.EXIT_ON_CLOSE); this.add(panel); /得到当前默认分辨率java.awt.Dimension dim =java.awt.Toolkit.getDefaultToolkit().getScreenSize();public static void main(String args) Part main= new Part();/ 设定柱状图标题Part.panel.setHistogramTitle( 资金 (元 ), 事项 );/ 插入绘图数据,比
3、例动态计算 MyPanel.insert( 教育 , 200.5f);MyPanel.insert( 科技, 200.5f);MyPanel.insert( 登月 , 300.2f);MyPanel.insert( 建设, 400.1f); MyPanel.insert(a, 300.2f);/设置窗体位置,使其绝对居中(dim.height -MyPanel.insert(b, 100.5f);/ MyPanel.insert(c,100);/ MyPanel.insert(d, 300);/MyPanel.insert(b, 200);/ MyPanel.insert(c, 100);ma
4、in.setVisible(true);/定时器控制切换javax.swing.Timer timer = new Timer(1000, newjava.awt.event.ActionListener() public voidactionPerformed(java.awt.event.ActionEvent e) panel.repaint(); ); timer.start(); public static final int WIDTH = 800;public static final int HEIGHT = 600;static MyPanelpanel = new MyPa
5、nel();class MyPanel extends JPanel public MyPanel() this.xTitle = X; this.yTitle = Y; public MyPanel(String x, Stringy) this.xTitle = x;yTitle = y; public static void insert(String aElem, float aValue)elem.add(aElem);value.add(aValue); public void paintComponent(Graphics g) super.paintComponent(g);g
6、.clearRect(0, 0,Part.WIDTH, Part.HEIGHT);Part.HEIGHT - SIZE, Part.WIDTH - SIZE,SIZE - 8, Part.WIDTH - SIZE,SIZE - 6, Part.HEIGHT - SIZE,/titleg.drawString(this.yTitle, SIZE - 20, SIZE - 6);g.drawString(this.xTitle, Part.WIDTH - SIZE - 20, Part.HEIGHT -SIZE + 20);/动态计算每个柱状图的false;drawHistogram(g);fla
7、g = else drawCaky(g);flag = true;/画柱状图public void drawHistogram(Graphics g)g.setColor(Color.BLACK);g.setFont(newFont(隶书, Font. PLAIN, 15);g.drawString( 柱状图, SIZE + 200, 30);g.setColor(Color.GREEN);/竖线g.drawLine(SIZE, Part.HEIGHT - SIZE, SIZE,SIZE);/横线g.drawLine(SIZE,if (flag)Part.HEIGHT - SIZE);/箭头g
8、.setColor(Color.RED);int x1 = SIZE - 6, SIZE,SIZE + 6;int y1 = SIZE + 8, SIZE, SIZE + 8;g.drawPolyline(x1, y1, 3);int x2 = Part.WIDTH -Part.WIDTH - SIZE - 8;int y2 = Part.HEIGHT -Part.HEIGHT - SIZE + 6;g.drawPolyline(x2, y2, 3);int wigth = (int) (Part.WIDTH - 3 * SIZE) /java.awt.Color(Digit.getDigit
9、(255),Digit.getDigit(255),g.fillRect(wigth * (i * 2 + 1) + SIZE, Part.HEIGHT - SIZE -wigth, height);(value.size() * 2);/取数据中的最大值floatmax = 0;for (Float elem : value) if(max < Value() max =Value();/按比例计算高度double num = (double) (Part.HEIGHT - 2 *(SIZE + 10) / (double) max;/画出每个柱
10、状图for (int i = 0; i < elem.size(); i+) int height =(int) (value.get(i) * num);/g.drawRect(wigth*(i*2+2),Main.HEIGHT-SIZE-height,wigth,height);g.setColor(newDigit.getDigit(255);/填充颜色height,SIZE + 20);/在竖线上画出每项高度值g.drawString(Float.toString(value.get(i), SIZE - 40, Part.HEIGHT -SIZE - height +
11、5);/ 在竖线上画出标识点 g.drawLine(SIZE, Part.HEIGHT -SIZE - height, SIZE + 3,Part.HEIGHT - SIZE - height); /画饼图public void drawCaky(Graphics g) g.setColor(Color.BLUE);g.setFont(newFont(楷体 _GB2312, Font.BOLD, 15);int wigth =(int) (Part.WIDTH - CAKY_WIDTH) / 2);int height(int) (Part.HEIGHT - CAKY_WIDTH) / 2);
12、g.drawOval(wigth, height, CAKY_WIDTH, CAKY_WIDTH);g.drawString( 饼图, (int) (Part.WIDTH / 2) - 30, height - 50); intsum = 0;for (Float elem : value) sum += Value(); double part = 360d / sum;intcurrentAngle = 0;g.setColor(Color.RED);/画出每项名字g.drawString(Float.toString(value.get(i),wigth * (i * 2
13、 + 1) + SIZE,Part.HEIGHT - SIZE - 20 - height);/在横线上画出每项名字g.drawString(elem.get(i), wigth * (i2 + 1) + SIZE,Part.HEIGHT -int half = (int) (CAKY_WIDTH + 50) / 2;int xFlag =1; int yFlag = -1; for (int i = 0; i < elem.size(); i+) int angle =(int) (part *value.get(i).intValue() + 0.5); g.setColor
14、(newjava.awt.Color(Digit.getDigit(255),Digit.getDigit(255),Digit.getDigit(255); g.fillArc(wigth, height, CAKY_WIDTH,CAKY_WIDTH, currentAngle,angle);/用于计算每个圆周的值if(currentAngle > 90 && currentAngle < 181) xFlag = 1; yFlag = -1; else if (currentAngle > 180&&
15、amp;amp;currentAngle < 271) xFlag = 1;yFlag = -1; else if (currentAngle > 270)xFlag = 1;yFlag =-1; / 计算每块的标识字符串坐标int x = (int) (Math.cos(double) (currentAngle + angle / 2) *xFlag * half + half);int y = (int) (Math.sin(double) (currentAngle +angle / 2)yFlag * half + half);g.drawString(e
16、lem.get(i), x, y); currentAngle +=angle; public void setHistogramTitle(String y, String x)xTitle = x;yTitle = y;private boolean flag = true;private final int SIZE =100; private final int CAKY_WIDTH = 400; privateyTitle;private static List<String> elem = newMath.PI / 180)wigth - 40 +Math.PI / 180)height - 20 +final int STEP = 10;private String xTitle;private StringArrayList<String
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教育类实习报告模板集合十篇
- 2021届高考英语词性转换240词(考前必背自测版)
- 必修1WU-U5+B2U1-2课本短语默写
- 2024年度施工现场消防疏散指示标志安装及维护合同3篇
- 2024版临时用电突发事件应急预案合同3篇
- 2023年高考高频易错派生词大全教师版
- 2024年版房地产项目联合建设与运营协议版B版
- 2024土地合作开发合同-智慧社区建设项目3篇
- 2024年毛衣来图加工协议书
- 2024年建筑项目融资合同范本
- 社会组织信息公开制度范本
- 四年级上册心理健康教育教案-多彩的情绪 全国通用
- 自动化、电气及智科学科导论学习通超星课后章节答案期末考试题库2023年
- 钻井监督工作总结-监督工作总结
- 2022年清华班组长必修课程自测题目和答案解析
- 二年级安全教育期末测试题
- 北师大版九年级数学下册《综合与实践》教案及教学反思
- 2022电大《建筑材料(A)》期末试题及答案
- 22秋中传媒《传播学概论》作业考核答卷
- 商务英语视听说知到章节答案智慧树2023年山东外国语职业技术大学
- 农业经济学知到章节答案智慧树2023年华南农业大学
评论
0/150
提交评论