设计思路:

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-图表(扇形图的绘制)相关推荐

  1. R语言旋转扇形图的绘制

    R语言旋转扇形图的绘制 数据的准备 首先绘制条形图 加上极坐标图 数据的准备 首先我们的数据要是数据框或者tibble格式 以r语言自带的数据mpg为例 mpg view(mpg) 首先绘制条形图 g ...

  2. hdc mfc 画扇形图_使用echarts绘制条形图和扇形图

    使用echarts绘制条形图和扇形图 简单举例说明下echarts如何绘制条形图和扇形图 代码示例 echarts绘制条形图和扇形图 var mychart1=echarts.init(documen ...

  3. 如何使用 R 语言来绘制图表和图(曲线等)

    前言 如果你是学习或者从事数据分析相关的专业,那么你一定使用过或者被告知要使用 R 语言.但是有那么多可以数据分析的语言,为什么要使用 R 呢?因为 R 可以输出非常好的可以出版的图像,对于博客可能不 ...

  4. iOS-UI之简易图表——饼图(扇形图)、柱状图、折(曲)线图

    话不多说,先来看看效果: 1.饼图(扇形图) 2.柱状图 3.折线图 样子粗糙,见笑了. 现在来看看实现过程 一.饼图(扇形图) 1.实现思路 实现思路其实很简单,首先算传入数据数组的数据总和,然后根 ...

  5. Cesium通过primitives绘制大数据量扇形图

    通过PolygonGeometry绘制立体扇形图,并实现填充效果 let data = oList; //数据列表let labels = new Cesium.PrimitiveCollection ...

  6. android编程绘制扇形,分析实现Android自定义View之扇形图

    继承View基类,画了这样的扇形图 粗糙的样子^_^ 直接来步骤吧 1.分析 自定义View需要认真的分析下,里面还是会用到一些数学知识 首先是扇形该怎么表现 1. 扇形的外观是个圆弧,而且是围绕一个 ...

  7. Matplotlib之扇形图绘制

    1 扇形图介绍 扇形图用整个圆表示总数,用圆内各个扇形的大小表示各部分数量占总数的百分数. 2 扇形图绘制 扇形图通过pie()函数绘制 plt.pie(x, explode=None, labels ...

  8. JavaScript高德地图中绘制echarts图表随地图移动

    JavaScript高德地图中绘制echarts图表随地图移动** 先上效果图 实现方法如下: 使用高德地图"信息窗体",信息窗体AMap.InfoWindow的属性content ...

  9. 绘制渐变色扇形图 -基于python - matplotlib 颜色地图plt.cm模块儿

    绘制渐变色扇形图 -基于python - matplotlib 颜色地图cm模块儿         ʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔ ...

  10. 【Echarts 绘制柱状图、折线图和扇形图】

    1. 柱状图和折线图 柱状图和折线图的基本内容完全一致,只需要将option中的series的type: 'bar' 修改type: 'line',就可以将柱状图转化为折线图. initEchart( ...

最新文章

  1. [转]JSP常用指令
  2. Python基础教程:内置类型之生成器
  3. 下列关于计算机图形的应用中 错误的是,计算机图形学题库及答案
  4. 你觉得你个性上最大的优点是什么?
  5. vue-cli3使用cdn引入
  6. php返回200,关于API 使用 HTTP 状态码还是全部返回 200
  7. 阿呆做网站(1)--基本功能
  8. java ssdb查询_java连接ssdb数据库
  9. 三维建模软件:Rhino 7 for Mac
  10. 关于egret引擎游戏开发的笔记-1
  11. 华为人均工资高达70万,但先看看华为员工的15项标准
  12. mysql 1114_mysql 解决 ERROR 1114 (HY000): The table 'XXX' is full
  13. Excel中如何实现批量中文转拼音
  14. 内网穿透工具Ngrok
  15. Linux下的Java配置
  16. 抖音直播限流了多久恢复,抖音直播间突然没流量了
  17. CSP认证:棋局评估
  18. 新生宝宝奶粉喂养正确方法
  19. 【Linux】文件与路径
  20. 人物百度词条怎么创建,人物类百度百科创建更新

热门文章

  1. 基于Matlab使用激光雷达从点云到跟踪列表跟踪车辆仿真(附源码)
  2. php自定义表单 系统,PHP自定义表单系统Php综合源码下载-华软网
  3. 解放前端工程师——手把手教你开发自己的自定义列表和自定义表单系列之三表格
  4. 【Visio】 windows Visio 画图
  5. 数学建模方法——斯皮尔曼相关系数及其显著性检验 (Spearman’s correlation coefficient for ranked data)
  6. 如何批量将 Word 文档转为 Svg 格式
  7. ZOOM视频会议共享声音,Zoom共享屏幕播放视频卡顿,你学会了吗?
  8. 文件格式转换——DMG文件格式转换成ISO文件
  9. Navicat Preminm注册机 和源文件
  10. 查询的端口 -解决端口被占用的问题