`

Swing Pie

    博客分类:
  • Chat
 
阅读更多

package com.sky.java.chat;

import java.awt.Color;  
import java.awt.Graphics;  
import java.awt.Graphics2D;  
import java.awt.RenderingHints;  
import java.awt.Toolkit;  
import java.awt.geom.Arc2D;  
import java.awt.geom.Area;  
import java.awt.geom.GeneralPath;  
import java.awt.geom.Point2D;  
import java.util.ArrayList;  
import java.util.List;  
  
import javax.swing.JFrame;  
import javax.swing.JPanel;  
  
/** 
 * 绘制带阴影的饼图 
 *  
 * @author Biao 
 */  
@SuppressWarnings("serial")  
public class Pie extends JPanel {  
    // 饼图中每一个部分的百分比  
    private double[] percents = { 10.72, 15.38, 3.74, 10.26, 6.56, 5.69, 10.72, 15.38, 6.15, 18.0 };  
    // 饼图的颜色  
    private Color[] pieColors;  
      
    public Pie() {  
        List<Color> colors = new ArrayList<Color>();  
        colors.add(getColorFromHex("#169800"));  
        colors.add(getColorFromHex("#00E500"));  
        colors.add(getColorFromHex("#D0F15A"));  
        colors.add(getColorFromHex("#FF7321"));  
        colors.add(getColorFromHex("#E2FF55"));  
        colors.add(getColorFromHex("#AA6A2D"));  
        colors.add(getColorFromHex("#BFDD89"));  
        colors.add(getColorFromHex("#D718A5"));  
        colors.add(getColorFromHex("#00DBFF"));  
        colors.add(getColorFromHex("#00FF00"));  
          
        pieColors = colors.toArray(new Color[0]);  
    }  
      
    public static Color getColorFromHex(String hex) {  
        try {  
            return new Color(Integer.valueOf(hex.substring(1), 16));  
        } catch (Exception e) {  
            return Color.BLACK;  
        }  
    }  
  
    @Override  
    protected void paintComponent(Graphics g) {  
        super.paintComponent(g);  
        Graphics2D g2d = (Graphics2D) g;  
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);  
        int w = 380;  
        int h = (int) (w * 0.618);  
        fillPies(g2d, percents, 30, 30, w, h);  
    }  
  
    private void fillPies(Graphics2D g2d, double[] percents, int x, int y, int w, int h) {  
        int colorIndex = 0;  
        double startAngle = 0;  
        double arcAngle = 0;  
  
        // 一次性绘制完阴影,然后再绘制饼图的效果比绘制饼图的同时绘制它的阴影好  
        for (int i = 0; i < percents.length; ++i) {  
            arcAngle = percents[i] * 3.6;  
  
            if (i + 1 == percents.length) {  
                arcAngle = 360 - startAngle;  
            }
  
            Arc2D.Double arcTop = new Arc2D.Double(x, y, w, h, startAngle, arcAngle, Arc2D.PIE);  
  
            g2d.setColor(pieColors[colorIndex].darker());  
            g2d.fill(buildShadow(arcTop));  
  
            colorIndex = (colorIndex + 1) % pieColors.length;  
            startAngle += arcAngle;  
        }  
  
        colorIndex = 0;  
        startAngle = 0;  
        for (int i = 0; i < percents.length; ++i) {  
            arcAngle = percents[i] * 3.6;  
  
            if (i + 1 == percents.length) {  
                arcAngle = 360 - startAngle;  
            }  
  
            Arc2D.Double arcTop = new Arc2D.Double(x, y, w, h, startAngle, arcAngle, Arc2D.PIE);  
  
            g2d.setColor(pieColors[colorIndex]);  
            g2d.fill(arcTop);  
  
            colorIndex = (colorIndex + 1) % pieColors.length;  
            startAngle += arcAngle;  
        }  
    }  
  
    private Area buildShadow(Arc2D arc) {  
        int shadowDapth = 10;  
        Arc2D arcBottom = new Arc2D.Double(arc.getX(), arc.getY() + shadowDapth, arc.getWidth(),  
            arc.getHeight() + 0, arc.getAngleStart(), arc.getAngleExtent(), Arc2D.CHORD);  
  
        Point2D topLeft = new Point2D.Double(arc.getStartPoint().getX(), arc.getStartPoint().getY());  
        Point2D topRight = new Point2D.Double(arc.getEndPoint().getX(), arc.getEndPoint().getY());  
        Point2D bottomLeft = new Point2D.Double(arcBottom.getStartPoint().getX(), arcBottom  
            .getStartPoint().getY());  
        Point2D bottomRight = new Point2D.Double(arcBottom.getEndPoint().getX(), arcBottom  
            .getEndPoint().getY());  
  
        double[] xpoints = { topLeft.getX(), topRight.getX(), bottomRight.getX(), bottomLeft.getX() };  
        double[] ypoints = { topLeft.getY(), topRight.getY(), bottomRight.getY(), bottomLeft.getY() };  
  
        GeneralPath path = new GeneralPath();  
        path.moveTo(xpoints[0], ypoints[0]);  
        path.lineTo(xpoints[1], ypoints[1]);  
        path.lineTo(xpoints[2], ypoints[2]);  
        path.lineTo(xpoints[3], ypoints[3]);  
        path.closePath();  
  
        Area area = new Area(arcBottom);  
        area.add(new Area(path));  
  
        return area;  
    }  
  
    private static void createGuiAndShow() {  
        JFrame frame = new JFrame("");  
        frame.getContentPane().add(new Pie());  
  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        int sw = Toolkit.getDefaultToolkit().getScreenSize().width;  
        int sh = Toolkit.getDefaultToolkit().getScreenSize().height;  
        int w = 500;  
        int h = 400;  
        int x = (sw - w) / 2;  
        int y = (sh - h) / 2 - 40;  
        x = x > 0 ? x : 0;  
        y = y > 0 ? y : 0;  
        frame.setBounds(x, y, w, h);  
        frame.setVisible(true);  
    }  
  
    public static void main(String[] args) {  
        createGuiAndShow();  
    }  
}  
 
分享到:
评论

相关推荐

    基于TC72(SPI接口)温度传感器、STM32F103C8T6、LCD1602、FREERTOS的温度采集proteus仿真

    spi

    ehcache-core-2.6.9.jar

    javaee/javaweb常用jar包,亲测可用,导入到java工程中即可使用

    netty-transport-native-unix-common-4.1.51.Final.jar

    javaEE javaweb常用jar包 , 亲测可用,下载后导入到java工程中使用。

    node-v6.14.4-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v10.8.0-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    skywalking-plugins.jar skywalking-alarm.jar

    # 分布式链路追踪_skywalking_学习(3) skywalking_plugins.jar skywalking-alarm.jar

    用于将现有 digilite .pos 文件转换为 Deeplabcut 可以读取的 .csv 文件matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    【光伏预测】基于BP神经网络实现光伏发电功率预测附Matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    解密制度用python举例.md

    解密制度通常需要结合加密算法和密钥管理方法来确保解密操作的安全性和有效性

    node-v4.6.1-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    netty-transport-native-epoll-4.1.43.Final.jar

    javaEE javaweb常用jar包 , 亲测可用,下载后导入到java工程中使用。

    node-v6.9.4-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v4.1.2-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v8.1.4-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v5.6.0-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于matlab实现神经网络手写数字识别 配合美国MNIST标准手写数字字体库.rar

    基于matlab实现神经网络手写数字识别。配合美国MNIST标准手写数字字体库.rar

    【扩频通信】基于matlab QPSK和DSSS扩频通信(先扩频 后调制 误码率对比)【含Matlab源码 4549期】.mp4

    Matlab研究室上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    Linux系统中常用权限管理命令

    附件是Linux系统中常用权限管理命令,文件格式是markdown,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的! 这些命令是Linux系统中管理文件和目录权限的基础工具。使用这些命令时,需要对权限的表示方法和命令的参数有一定的了解。在执行权限更改操作时,务必谨慎,以避免不必要的安全问题或权限问题。

    粒子群算法 多目标优化问题 C++实现

    代码是在Qt平台上生成的项目,对应个人文章《粒子群算法优化多目标优化问题》

    httpclient-4.5.1.jar

    javaee/javaweb常用jar包,亲测可用,导入到java工程中即可使用

Global site tag (gtag.js) - Google Analytics