swing205图表

Java Swing中JFreeChart构建双纵轴(双Y轴)图表的使用纪要 背景 项目应用中整理纪要,用于参数说明。后抽部分简码以用例,特此纪要! 问题 Java Swing中JFreeChart如何构建双纵轴(双Y轴)图表 说明 JFreeChart是一个工厂类,是Swing中主要图表构建入口。 样例Demo 下面是应用Demo的样例代码,可以直接运行参考: package com.company.swing.jfreechart.barChart; import org.jfree.chart.C... 阅读详情

PieChat显示

在这里插入图片描述

package my;

import javax.swing.*;

public class Swing2
{
	private static void createGUI()
	{
		// JFrame指一个窗口,构造方法的参数为窗口标题
		// 语法:因为MyFrame是JFrame的子类,所以可以这么写
		JFrame frame = new MyFrame("Swing Demo");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		
		// 设置窗口的其他参数,如窗口大小
		frame.setSize(500, 300);
		
		// 显示窗口
		frame.setVisible(true);
		
		
	}
	
	public static void main(String[] args)
	{
		// 此段代码间接地调用了 createGUI(),具体原理在 Swing高级篇 里讲解
		// 初学者先照抄此代码框架即可
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run()
			{
				createGUI();
			}
		});

	}
}

package my;

import javax.swing.*;
import java.awt.*;

public class MyFrame extends JFrame
{

	public MyFrame(String title)
	{
		super(title);

		// Content Pane
		JPanel root = new JPanel();
		this.setContentPane(root);
		root.setLayout(new BorderLayout());

		PieChart chart = new PieChart();
		root.add(chart, BorderLayout.CENTER);
		
		chart.addPart(70, "A", new Color(0x00CDCD));
		chart.addPart(20, "B", new Color(0xFFC1C1));
		chart.addPart(10, "C", new Color(0xEEE8AA));

	}

	
}

package my;

import javax.swing.*;
import java.awt.*;
import java.awt.geom.Arc2D;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

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;
	
		// 求出总数量
		int totalAmount = 0;
		for(Part p : partList) 
			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 = getWidth();
		int height = getHeight();
		System.out.printf("width: %d, height: %d \n", width, height);
		//Rectangle rect = new Rectangle(0,0,200,200);
		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 += p.degree;
		}
	}
	
	@Override
	protected void paintComponent(Graphics g)
	{
		super.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 );
			}
		}
	}
	
	//////////////////////////////////////
	private static class Part
	{
		double amount;  // 该块区域所代表的数量
		int degree;  // 根据amount经计算得到
		Color color; // 图例颜色 
		Object tag;  // 相关数据对象,由外部指定
		Arc2D shape; // 实际绘制占据的形状
	}
	
}

PieChat选中效果

在这里插入图片描述

package my;

import javax.swing.*;
import java.awt.*;

public class MyFrame extends JFrame
{

	public MyFrame(String title)
	{
		super(title);

		// Content Pane
		JPanel root = new JPanel();
		this.setContentPane(root);
		root.setLayout(new BorderLayout());

		PieChart chart = new PieChart();
		root.add(chart, BorderLayout.CENTER);
		
		chart.addPart(70, "A", new Color(0x00CDCD));
		chart.addPart(20, "B", new Color(0xFFC1C1));
		chart.addPart(10, "C", new Color(0xEEE8AA));

		chart.setPartClickedListener(new PieChart.PartClickedListener() {
			@Override
			public void partClicked(Object tag)
			{
				System.out.println("点中了分区: " + tag);
			}
		});
	}

	
}

package my;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Arc2D;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class PieChart extends JPanel
{
	// 数据:Pie表示每一小块
	private List<Part> partList = new ArrayList<>();
	
	public PieChart()
	{
		this.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e)
			{	
				onMouseClicked(e);
			}			
		});
	}
	
	private void onMouseClicked(MouseEvent e)
	{
		// 被选中的分区
		Part activePart = null; 
		
		// 判断点中了哪一个小块
		for(Part p : partList)
		{
			if(p.shape == null) continue;
			if(p.shape.contains(e.getX(), e.getY()))
			{
				p.selected = true;
				activePart = p;
			}
			else
			{
				p.selected = false;
			}
		}
		
		if( activePart != null)
		{
			repaint();
			
			// 调用这个接口
			if(this.partClickedListener != null)
			{
				partClickedListener.partClicked( activePart.tag);
			}
		}		
	}
	
	//////////// 自定义事件处理 /////////////
	public interface PartClickedListener
	{
		public void partClicked(Object tag);
	}
	private PartClickedListener partClickedListener;
	
	public void setPartClickedListener(PartClickedListener listener)
	{
		this.partClickedListener = listener;
	}
	
	
	// 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 );
	}
	
	// 提供给调用者,可以用于绘制图例
	public List<Part> getPartList()
	{
		return this.partList;
	}
	
	// 根据每一个饼的数值,分配角度比例,自动分配颜色
	private void calculate()
	{
		if(partList.size() == 0) return;
	
		// 求出总数量
		int totalAmount = 0;
		for(Part p : partList) 
			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 = getWidth();
		int height = getHeight();
		//System.out.printf("calculate: width: %d, height: %d \n", width, height);
		//Rectangle rect = new Rectangle(0,0,200,200);
		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 , 0-p.degree,Arc2D.PIE);
			start -= p.degree;
		}
	}
	
	@Override
	protected void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		
		int width = getWidth();
		int height = getHeight();
		Graphics2D g2d = (Graphics2D) g;
		//System.out.printf("* width: %d, height: %d \n", width, height);
		
		// 平滑绘制 ( 反锯齿 )
		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 );
				
				if(p.selected)
				{
					g2d.setPaint(Color.GRAY);
					g2d.setStroke(new BasicStroke(2));
					g2d.draw(p.shape);
				}
			}
		}
	}
	
	//////////////////////////////////////
	private static class Part
	{
		double amount;  // 该块区域所代表的数量
		int degree;  // 根据amount经计算得到
		Color color; // 图例颜色 
		Object tag;  // 相关数据对象,由外部指定
		Arc2D shape; // 实际绘制占据的形状
		boolean selected;// 是否为选中状态
	}
	
}

java调用swing生成柱状图 图形界面,把版本1的过程改为图形化显示。在文本框下提示用户输入文件名,然后以 统计直方图的形式显示每个字母的出现频率。运行示例: 立即下载

相关推荐

周立功CAN盒二次开发实录:用QT5.1.0解析汽车CAN报文(附数据可视化技巧)

本文详细介绍了基于QT5.1.0和周立功USBCAN-E-U设备进行汽车CAN总线二次开发的实战过程。核心内容包括利用CANdb++数据库解析原始报文并转换为物理值,以及通过QCustomPlot库实现高性能实时数据可视化,为车载诊断与车联网开发提供了一套完整的工程实践方案。

sugar的博客 1058

JavaSwing快速绘制图表,折线图,借助jfreechart的工具类

效果预览: 1、用到的jar包 yujianbo-java-tools-7.8.0.jar jfreechart-1.0.19.jar jcommon-1.0.23.jar 2、代码 JFrame jf = new JFrame(); SwingService.initJFrame(jf, false, 400, 400,null, JFrame.EXIT_ON_CLOS...

劲雨波 6744

Cadence IC618/Spectre231安装避坑指南:详解环境变量配置与License管理那些事儿

本文深入解析Cadence IC618/Spectre231安装过程中的环境变量配置与License管理难题,提供从变量冲突解决到高效License管理的实用方案。针对常见的64位标识冲突、路径污染及License服务器连接问题,给出具体诊断步骤和优化建议,帮助用户构建稳定可靠的EDA环境。

weixin_33737134的博客 616

Swing-图表(扇形图的绘制)

设计思路: 1、创建图表类(各个属性) package my; import java.awt.Color; import java.awt.geom.Arc2D; public class Part { double amount; //该块区域所代表的数量 int degree; //根据amount经计算得到 Color color; //图例颜色 ...

给你更好的 3219

DataEaseV2.9 本地开发环境搭建与调试指南

本文详细指导如何搭建DataEase V2.9的本地开发环境,涵盖从软件准备、源码获取、数据库初始化到在IDEA中配置、编译和调试的全过程。重点解决了本地运行环境的关键配置与常见问题,帮助开发者高效开启DataEase的定制化开发与二次开发。

weixin_29290863的博客 143

STM32F407串口DMA收发实战:标准库配置与环形缓冲区实现

DMA(直接存储器访问)是嵌入式系统中提升数据传输效率的核心技术,它允许外设与内存直接交换数据而无需CPU干预。其工作原理是通过专用硬件控制器接管数据搬运任务,CPU仅需初始化传输参数即可处理其他事务,从而显著降低系统负载。这项技术的核心价值在于释放CPU算力,实现高吞吐、低延迟的实时通信,尤其适用于数据采集、工业控制和通信网关等场景。在STM32F407等ARM Cortex-M4芯片中,串口结合DMA可实现稳定的高速数据流处理。本文以STM32F407标准库为基础,深入解析USART1的DMA发送与接收

weixin_29169899的博客 319

JavaSwing快速绘制图表,饼状图,借助jfreechart的工具类

效果图(可以自适应窗口大小): 1、用到的jar包 yujianbo-java-tools-7.8.0.jar jfreechart-1.0.19.jar jcommon-1.0.23.jar 2、代码: //关键性代码 DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("已完成...

劲雨波 1179

海康威视 2024届 数字逻辑设计 实习笔试分析

记录一下 5月11日晚,做的海康威视的一场笔试。分享给需要的IC人。 岗位:数字逻辑设计工程师(浙江 杭州) 转载需要本人同意! 我的见解不一定都是准确的,欢迎评论区交流指正~~

记录所学,分享知识,结识挚友 1万+

使用 Java Swing 和 XChart 创建多种图表

通过本文的示例代码,您可以在 Java 应用程序中轻松创建多种类型的图表。XChart 提供了简单且强大的 API,能够满足大多数数据可视化需求。希望这些示例能帮助您更好地理解如何使用 XChart 进行数据可视化。

weixin_44107140的博客 1240

相位编码脉冲压缩信号的理论研究与 Matlab 实现

通过实际的代码示例,我们展示了如何生成信号、进行相位编码、传输信号、相位解码和脉冲压缩的步骤。相位编码脉冲压缩信号是通过在发射端对信号进行相位编码,并在接收端对信号进行相位解码来实现的。其主要原理是在发射端将信号的频率进行调制,使得信号具有宽带特性,然后在接收端通过匹配滤波器对信号进行解调和压缩,从而提高信号的分辨率和抗干扰能力。相位编码脉冲压缩信号是一种在信号处理中常用的技术,用于提高信号的分辨率和抗干扰能力。可以使用 Matlab 中的信号生成函数生成一个宽带脉冲信号,例如矩形脉冲信号或高斯脉冲信号。

CyberWizarDD的博客 905

AUTOSAR进阶图解==>AUTOSAR_EXP_CDDDesignAndIntegrationGuideline

本文档提供了AUTOSAR架构中复杂驱动(CDD)的设计与集成指南。CDD作为非标准化的软件实体,位于复杂驱动层,实现传感器评估、执行器控制、微控制器访问等特殊功能。文档详细阐述了CDD的架构特点、设计建议(包括文档要求、文件结构、接口描述等)以及与其他模块(RTE、库、标准BSW等)的集成方式。特别强调了CDD在多核系统和MCAL层中的实现考量,为开发人员提供了从文档规范到代码实现的全方位指导,确保CDD在保持AUTOSAR兼容性的同时满足特殊功能需求。

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 1890

jfreechart

要想绘制出漂亮的图表,就必须了解图表的构成部分,将图表进行分解成N个部分。  然后再对每一个部分进行渲染,设置样式:包括背景色、轮廓线条样式和颜色、填充颜色、字体大小、样式、颜色。  同时,需要确保在整个项目中,图表的样式风格整体统一。      统一,和谐才能打造漂亮、干净、专业的外观.     使用JfreeChart创建柱状图,折线图,饼图,堆积柱状图,时间序列图,二维Y轴坐

小黑霸气 的专栏 3525

IMEI引起的无法驻网问题

问题不复杂,场景很简单,如上图,UE在进行LTE attach过程时,在送完NAS security mode complete后,就立刻收到了网络attach reject 带cause 6 Illegal ME,根据协议描述这个cause 代表ME不被网络可接受,例如ME在禁止名单或者黑名单中就会有这种cause。然而前方在报这个问题的时候,也是知道SIM卡和手机IMEI在运营商那边没能成功绑定,然后才报的问题,要查看手机是不是有问题...... 告诉前方原因后,还认为是手机问题,告知要继续查。

asd199086的博客 1426

Jfreechart

转载: http://www.oschina.net/code/snippet_855019_36505 摘要 包括JfreeChart 中文API, JfreeChart开发中需要注意的问题, JfreeChart美化,使用JfreeChart创建柱状图,折线图,饼图,堆积柱状图,时间序列图,二维Y轴坐标图 Jfreechart chart 图表 目录[-]

tyust512的专栏 765

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

PureLive 桌面托盘右键菜单事件与事务所有权重构实战:single-flight 防抖与刷新-弹出顺序保障

本文基于 PureLive(纯粹直播)开源仓库中 `docs/DESKTOP_TRAY_CONTEXT_MENU_EVENT_AND_TRANSACTION_AUDIT_2026_09_15.md` 审计文档,完整还原桌面端系统托盘右键菜单的一次事件与事务所有权修复:从旧实现中“右键按下/释放双路弹菜单”的竞态问题,到 `DesktopTrayMenuCoordinator` single-fli

gitblog_00012的博客 924

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JavaSwing快速绘制图表,雷达图,借助jfreechart的工具类

效果图(可以自适应窗口大小): 1、用到的jar包 yujianbo-java-tools-7.8.0.jar jfreechart-1.0.19.jar jcommon-1.0.23.jar 2、代码: DefaultCategoryDataset datasetSpider = new DefaultCategoryDataset(); String key1 ...

劲雨波 4192

Java图形化界面编程超详细知识点(10)——Swing_表格

7 JTable、TableModel实现表格 表格也是GUI程序中常用的组件,表格是一个由多行、多列组成的二维显示区。Swing的JTable以及相关类提供了这种表格支持,通过使用JTable以及相关类,程序既可以使用简单的代码创建表格来显示二维数据,也可以开发出功能丰富的表格,还可以为表格定制各种显式外观,编辑特性。 7.1 创建简单表格 使用JTable创建简单表格步骤: 1.创建一个一维数组,存储表格中每一列的标题 2.创建一个二维数组,存储...

m0_66908465的博客 6262

Java swing绘制柱状图和饼图

**15.14编写程序,使用条形图显示作业、平时测验、其中考试和期末考试占总成绩的百分比。假设作业占20%用红色显示,平时测验占10%用蓝色显示,其中考试占30%用绿色显示,期末考试占40%用橙色显示。 public class Job15_14 extends JFrame { public Job15_14() throws HeadlessException { Job1514 j...

ximen250的专栏 4725

java实现各种数据统计图(柱形图,饼图,折线图)

  一,前期准备工作,也就把这三个第三方包添加进本文工程,添加过程特别简单,前面写过一篇博客,讲的是java如何读取Excel表格中的数据(有兴趣的同学可以看一看:http://blog.youkuaiyun.com/pzhtpf/article/details/7506135),也要添加第三方包,添加过程一模一样,这里我们在复习一遍: 1, 建,立java项目,在这个项目在建立一个新的文件夹lib; ...

Mrchai521的博客 3387

JavaSwing快速绘制图表,柱状图,借助jfreechart的工具类

效果图(可以自适应窗口大小): 1、用到的jar包 yujianbo-java-tools-7.8.0.jar jfreechart-1.0.19.jar jcommon-1.0.23.jar 2、代码: //关键性代码 DefaultCategoryDataset datasetBar1 = new DefaultCategoryDataset(); ...

劲雨波 2173

Java Swing组件:表格

本文介绍了Java Swing组件表格的使用方法。表格(JTable)是将数据以二维的形式展示给用户,它包括行和列,每一行表示一个对象,每一列表示对象的一种属性。

hitmengfanchao的博客 4849

JAVA生成可视化图表

Java生成Echarts可视化数据图表

qq_38848322的博客 5272

java swing 曲线图_JAVA Swing使用JFreeChart实现折线图绘制

1 importorg.jfree.chart.ChartFactory;2 importorg.jfree.chart.ChartPanel;3 importorg.jfree.chart.JFreeChart;4 importorg.jfree.chart.axis.DateAxis;5 importorg.jfree.chart.axis.DateTickUnit;6 importorg.j...

weixin_31746993的博客 674
上一篇: swing204自定义控件
下一篇: swing206界面线程与工作线程
dingpython
博客等级 码龄6年 5粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值