Swing-图表(扇形图的绘制)
设计思路:
1、创建图表类(各个属性)
package my;import java.awt.Color;
import java.awt.geom.Arc2D;public class Part
{double amount; //该块区域所代表的数量int degree; //根据amount经计算得到Color color; //图例颜色Object tag; //相关数据对象,由外部指定Arc2D shape; //实际绘制的形状
}
2、进行图表绘制(见代码解析)【主要方法:添加扇形表+比例分配+绘制】
package my;import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.geom.Arc2D;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;import javax.swing.JPanel;public class PieChart extends JPanel
{//数据:pie表示一小块private List<Part>partList =new ArrayList<>();//color如果为null,则由内部自动分配public void addPart(double amount,Object tag,Color color){if(amount<=0)return;Part p=new Part();p.amount=amount;p.tag=tag;p.color=color;//随机产生一种颜色if(color==null){int rgb=new Random().nextInt(0xFFFFFF);p.color=new Color(rgb);}partList.add(p);}//根据每一个饼的数值,分配角度,自动分配颜色private void calculate(){if(partList.size()==0) return;//求出总数量double totalAmount=0;for(Part p : partList)totalAmount=totalAmount+p.amount;//分配每一份所占的角度int totalDegrees=0;for(int i=0;i<partList.size();i++){Part p=partList.get(i);p.degree=(int)(360*p.amount/totalAmount);if(p.degree<3)p.degree=3; //有的份额太小,最低分配3角度if(i==partList.size()-1)p.degree=360-totalDegrees; //确保占满360度totalDegrees+=p.degree;}//取得一个最大的正方形int width=this.getWidth();int height=this.getHeight();int w=width;int h=width;if(h>height){h=height;w=height;}Rectangle rect = new Rectangle((width-w)/2,(height-h)/2,w,h);rect.grow(-4, -4); //往里面缩一点//计算每一个扇形的形状int start=90;for(Part p : partList){p.shape=new Arc2D.Double(rect, start, p.degree, Arc2D.PIE);start=start+p.degree;}}@Overrideprotected void paintComponent(Graphics g) {// TODO Auto-generated method stubsuper.paintComponent(g);int width = getWidth();int height = getHeight();Graphics2D g2d = (Graphics2D) g;// 平滑绘制 ( 反锯齿 )g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);//计算每一份额的角度和扇形this.calculate();for(Part p:partList){if(p.shape != null) {g2d.setPaint( p.color);g2d.fill( p.shape );}}}}
3、添加主面板+添加扇形
package my;import java.awt.BorderLayout;
import java.awt.Color;import javax.swing.JFrame;
import javax.swing.JPanel;public class MyFrame extends JFrame
{public MyFrame(String title){super(title);//内容面板JPanel root=new JPanel();this.setContentPane(root);root.setLayout(new BorderLayout());PieChart chart = new PieChart();root.add(chart, BorderLayout.CENTER);chart.addPart(70, "A", Color.lightGray);chart.addPart(20, "B", Color.RED);chart.addPart(10, "C", Color.BLUE);}
}
4、运行程序main
package my;import java.awt.Container;
import java.awt.FlowLayout;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;public class MyDemo
{private static void createGUI(){// JFrame指一个窗口,构造方法的参数为窗口标题JFrame frame = new MyFrame("比例图");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置窗口的其他参数,如窗口大小frame.setSize(500, 300);// 显示窗口frame.setVisible(true);}public static void main(String[] args){javax.swing.SwingUtilities.invokeLater(new Runnable() {public void run(){createGUI();}});}
}
Swing-图表(扇形图的绘制)相关推荐
- R语言旋转扇形图的绘制
R语言旋转扇形图的绘制 数据的准备 首先绘制条形图 加上极坐标图 数据的准备 首先我们的数据要是数据框或者tibble格式 以r语言自带的数据mpg为例 mpg view(mpg) 首先绘制条形图 g ...
- hdc mfc 画扇形图_使用echarts绘制条形图和扇形图
使用echarts绘制条形图和扇形图 简单举例说明下echarts如何绘制条形图和扇形图 代码示例 echarts绘制条形图和扇形图 var mychart1=echarts.init(documen ...
- 如何使用 R 语言来绘制图表和图(曲线等)
前言 如果你是学习或者从事数据分析相关的专业,那么你一定使用过或者被告知要使用 R 语言.但是有那么多可以数据分析的语言,为什么要使用 R 呢?因为 R 可以输出非常好的可以出版的图像,对于博客可能不 ...
- iOS-UI之简易图表——饼图(扇形图)、柱状图、折(曲)线图
话不多说,先来看看效果: 1.饼图(扇形图) 2.柱状图 3.折线图 样子粗糙,见笑了. 现在来看看实现过程 一.饼图(扇形图) 1.实现思路 实现思路其实很简单,首先算传入数据数组的数据总和,然后根 ...
- Cesium通过primitives绘制大数据量扇形图
通过PolygonGeometry绘制立体扇形图,并实现填充效果 let data = oList; //数据列表let labels = new Cesium.PrimitiveCollection ...
- android编程绘制扇形,分析实现Android自定义View之扇形图
继承View基类,画了这样的扇形图 粗糙的样子^_^ 直接来步骤吧 1.分析 自定义View需要认真的分析下,里面还是会用到一些数学知识 首先是扇形该怎么表现 1. 扇形的外观是个圆弧,而且是围绕一个 ...
- Matplotlib之扇形图绘制
1 扇形图介绍 扇形图用整个圆表示总数,用圆内各个扇形的大小表示各部分数量占总数的百分数. 2 扇形图绘制 扇形图通过pie()函数绘制 plt.pie(x, explode=None, labels ...
- JavaScript高德地图中绘制echarts图表随地图移动
JavaScript高德地图中绘制echarts图表随地图移动** 先上效果图 实现方法如下: 使用高德地图"信息窗体",信息窗体AMap.InfoWindow的属性content ...
- 绘制渐变色扇形图 -基于python - matplotlib 颜色地图plt.cm模块儿
绘制渐变色扇形图 -基于python - matplotlib 颜色地图cm模块儿 ʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔ ...
- 【Echarts 绘制柱状图、折线图和扇形图】
1. 柱状图和折线图 柱状图和折线图的基本内容完全一致,只需要将option中的series的type: 'bar' 修改type: 'line',就可以将柱状图转化为折线图. initEchart( ...
最新文章
- [转]JSP常用指令
- Python基础教程:内置类型之生成器
- 下列关于计算机图形的应用中 错误的是,计算机图形学题库及答案
- 你觉得你个性上最大的优点是什么?
- vue-cli3使用cdn引入
- php返回200,关于API 使用 HTTP 状态码还是全部返回 200
- 阿呆做网站(1)--基本功能
- java ssdb查询_java连接ssdb数据库
- 三维建模软件:Rhino 7 for Mac
- 关于egret引擎游戏开发的笔记-1
- 华为人均工资高达70万,但先看看华为员工的15项标准
- mysql 1114_mysql 解决 ERROR 1114 (HY000): The table 'XXX' is full
- Excel中如何实现批量中文转拼音
- 内网穿透工具Ngrok
- Linux下的Java配置
- 抖音直播限流了多久恢复,抖音直播间突然没流量了
- CSP认证:棋局评估
- 新生宝宝奶粉喂养正确方法
- 【Linux】文件与路径
- 人物百度词条怎么创建,人物类百度百科创建更新
热门文章
- 基于Matlab使用激光雷达从点云到跟踪列表跟踪车辆仿真(附源码)
- php自定义表单 系统,PHP自定义表单系统Php综合源码下载-华软网
- 解放前端工程师——手把手教你开发自己的自定义列表和自定义表单系列之三表格
- 【Visio】 windows Visio 画图
- 数学建模方法——斯皮尔曼相关系数及其显著性检验 (Spearman’s correlation coefficient for ranked data)
- 如何批量将 Word 文档转为 Svg 格式
- ZOOM视频会议共享声音,Zoom共享屏幕播放视频卡顿,你学会了吗?
- 文件格式转换——DMG文件格式转换成ISO文件
- Navicat Preminm注册机 和源文件
- 查询的端口 -解决端口被占用的问题