Java Graphics绘制表格和直方图

最近有一个需求是使用Java的swing中Graphics绘制表格和直方图,感觉还是有点意思记录一下,先上图。


​ 开始感觉有点复杂,其实和自己在Windows的画图工具中操作差不多,只不过要使用代码实现。主要用到了Java中的swing库中的JPanel,也就是画板类,根据API文档即可作图。

Jpanel

需要使用一个类继承Jpanel,然后重载paintComponent方法,使用提供Graphics对象来进行图形的绘制。

Graphics对象的方法

具体就是对Graphics对象的API的使用,主要使用如下方法



JFrame

使用JFrame创建一个窗口,然后将添加JPanel组件,具体API如下

表格实现

import javax.swing.*;
import java.awt.*;/*** 表格的Panel*/
public class TablePanel extends JPanel {@Overridepublic void paintComponent(Graphics g) {// 窗口高度int frameHeight = getHeight();// 窗口宽度int frameWidth = getWidth();// 单元格宽度int width = 120;// 单元格高度int height = 60;// 字体大小int fontSize = 20;// 字体String font = "微软雅黑";// 显示的字段数int fieldSize = 5;// 左右偏移量int offset = (frameWidth - width * fieldSize) / 2;// 行数int rows = 6;// 设置画笔颜色g.setColor(Color.white);// 绘制背景色g.fillRect(0, 0, frameWidth, frameHeight);// 设置画笔颜色g.setColor(Color.BLACK);// 设置字体g.setFont(new Font(font, 1, fontSize));// 标题文字xg.drawString("表格", frameWidth / 2 - fontSize * 3, height / 2);// 设置画笔的颜色为RED 表头背景颜色g.setColor(Color.RED);// 绘制表头背景g.fillRect(offset, height, fieldSize * width, height);// 设置画笔颜色为黑色g.setColor(Color.BLACK);// 表头g.drawLine(offset, height, frameWidth - offset, height);for (int i = 0; i <= fieldSize; i++) {g.drawLine(offset + i * width, height, offset + i * width, height * 2);// 表头文字g.setFont(new Font(Font.SANS_SERIF, 1, fontSize - 2));switch (i) {case 0:g.drawString("字段一", offset + fontSize, height + height / 2 + fontSize / 2);break;case 1:g.drawString("字段二", offset + i * width + fontSize, height + height / 2 + fontSize / 2);break;case 2:g.drawString("字段三", offset + i * width + fontSize, height + height / 2 + fontSize / 2);break;case 3:g.drawString("字段四", offset + i * width + fontSize, height + height / 2 + fontSize / 2);break;case 4:g.drawString("字段五", offset + i * width + fontSize, height + height / 2 + fontSize / 2);break;default:break;}}g.drawLine(offset, height * 2, frameWidth - offset, height * 2);// 内容for (int i = 0; i < rows; i++) {// 当前行高int thisHeight = height * (i + 2);// 隔行换色if (i % 2 == 0) {// 设置画笔的颜色为蓝色g.setColor(Color.BLUE);} else {// 设置画笔的颜色为黄色g.setColor(Color.YELLOW);}// 绘制当前行背景g.fillRect(offset, thisHeight, fieldSize * width, height);// 设置画笔的颜色为黑色g.setColor(Color.BLACK);// 当前行的线g.drawLine(offset, thisHeight, frameWidth - offset, thisHeight);for (int j = 0; j <= fieldSize; j++) {// 绘制表格分割线g.drawLine(offset + j * width, thisHeight, offset + j * width, thisHeight + height);}// 当前行的线g.drawLine(offset, thisHeight + height, frameWidth - offset, thisHeight + height);}}
}

直方图实现

import javax.swing.*;
import java.awt.*;
import java.util.*;public class HistogramPanel extends JPanel {@Overrideprotected void paintComponent(Graphics g) {// 获取当前窗口高度int frameHeight = getHeight();// 获取当前窗口宽度int frameWidth = getWidth();// 字体String font = "微软雅黑";// 字体大小int fontSize = 20;// 柱状图 宽度int width = 40;// 柱状图 高度int height = 40;// 设置画笔颜色g.setColor(Color.white);// 绘制背景色g.fillRect(0, 0, frameWidth, frameHeight);// 设置画笔颜色g.setColor(Color.BLACK);// 设置字体g.setFont(new Font(font, 1, 20));// 标题文字g.drawString("直方图", frameWidth / 2 - fontSize * 3, 30);// 绘制底部线条g.drawLine(frameWidth / 2 - 200, frameHeight / 2 + 150, frameWidth / 2 + 200, frameHeight / 2 + 150);// 绘制左侧线条g.drawLine(frameWidth / 2 - 200, frameHeight / 2 + 150, frameWidth / 2 - 200, frameHeight / 2 - 150);// 设置字体g.setFont(new Font(font, 1, 12));// 绘制文字g.drawString("y", frameWidth / 2 - 200 - 20, frameHeight / 2 - 150);g.drawString("x", frameWidth / 2 + 200, frameHeight / 2 + 150);// 起始 宽高坐标int initHeight = frameHeight / 2 + 150;int initWidth = frameWidth / 2 - 180;// 创建随机数Random random = new Random();// 绘制柱状图for (int i = 0; i < 5; i++) {// 生成随机数int h = random.nextInt(10);// 设置画笔颜色g.setColor(Color.BLUE);// 绘制柱子g.fillRect(initWidth + i * (width + 20), initHeight - h * height, width, h * height);}}
}

主程序

import javax.swing.*;/*** 程序运行类*/
public class Application {public static void main(String[] args) {// 创建jframeJFrame frame1 = new JFrame();// 添加Panelframe1.getContentPane().add(new TablePanel());// 设置标题frame1.setTitle("表格");// 设置大小frame1.setSize(800, 600);// 显示frame1.setVisible(true);// 居中frame1.setLocationRelativeTo(null);// 创建jframeJFrame frame2 = new JFrame();// 添加Panelframe2.getContentPane().add(new HistogramPanel());// 设置标题frame2.setTitle("直方图");// 设置大小frame2.setSize(800, 600);// 显示frame2.setVisible(true);}
}

Java Graphics绘制表格和直方图相关推荐

  1. 学以致用——Java源码——使用Graphics类drawRect方法绘制表格(Grid Using Method drawRect)

    程序功能: 使用Graphics类drawRect方法绘制10*10表格. 运行结果: 源码: 1. 实体类 //Creating JFrame to display DrawPanel. impor ...

  2. java音频频谱_H5录音音频可视化-实时波形频谱绘制、频率直方图

    这段时间给GitHub Recorder开源库添加了两个新的音频可视化功能,比以前单一的动态波形显示丰富了好多(下图后两行是不是比第一行看起来丰满些):趁热打铁写了一个音频可视化相关扩展测试代码,下面 ...

  3. java graphics画圆_在Java中绘制一个漂亮的圆圈

    我正在使用 Java Graphics而且我一直在变得"丑陋". 这是我的Java程序所做的 这是在Matlab中做的同样的事情 我认为Java显然不像Matlab那样" ...

  4. java 取pdf表格内容数据_Java 在PDF中添加表格

    本文将介绍通过Java编程在PDF文档中添加表格的方法.添加表格时,可设置表格边框.单元格对齐方式.单元格背景色.单元格合并.插入图片.设置行高.列宽.字体.字号等. 使用工具:Free Spire. ...

  5. 史上最扯Java图形绘制(J2SE)之一JAVA动画效果

    很多主一听说Java界面,一水的头大外带血压高,兄弟我倒觉得没什么必要.           其实Java这东西吧,就简便性和其初衷而言,真他妈就在GUI 这地界是有优势的,单就其2D界面开发的易用性 ...

  6. JAVA Applet——绘制心形曲线

    绘制心形曲线 1.要求 非常有名的笛卡尔曲线数学公式:(x2+y2−2ax)2=4a2(x2+y2)(x^{2}+y^{2}-2ax)^{2}=4a^{2}(x^{2}+y^{2})(x2+y2−2a ...

  7. GDI+绘图基础,绘制表格

    GDI+绘图基础 编写图形程序时需要使用GDI(图形设备接口Graphics Device Interface),从程序设计的角度看,GDI包括两个部分:GDI对象和GDI函数. GDI对象定义了GD ...

  8. 如何用java画坐标轴_在java中绘制极坐标图

    有谁知道如何开始在java中绘制极坐标图并在此图上绘制一些点?我的意思是圆圈和线条,我希望用像swing这样的东西来做这件事,而不是像Jfreechart那样使用任何库 谢谢 解决方法: 你可能想看看 ...

  9. c# winform 绘制表格填充数据并且打印预览表格

    调用打印类并执行预览 using System; using System.Collections.Generic; using System.ComponentModel; using System ...

最新文章

  1. 担心GPT-3被喂假消息?谷歌新研究,将知识图谱转成“人话”用于训练丨NAACL 2021...
  2. 强化学习—— TD算法(Sarsa算法+Q-learning算法)
  3. 【通知】有三AI发布150页深度学习开源框架指导手册与GitHub项目,欢迎加入我们的开源团队...
  4. Unity-Animator深入系列---控制IK
  5. 160 - 52 egis.1
  6. Hibernate——(3)主键生成策略持久化类的三种状态
  7. phpcmsV9 完整更新ckeditor编辑器到最新版 - 源码篇
  8. oracle+表的更新日志,测试oracle插入 删除 更新表的日志开销
  9. dubbo 自定义路由_高性能可扩展分布式RPC框架Dubbo内核原理揭秘
  10. oracle批量更新之使用游标进行分批次更新的5种方式及速度比对
  11. 零基础计算机编程入门自学需要什么条件
  12. java文字水印模糊_Java添加文字水印和图片水印
  13. 优化mac触摸板(Trackpad)使用体验的推荐设置
  14. 最受推荐的10本Python书籍
  15. 美国住宅IP和机房Ip的区别
  16. element-ui的el-menu路由模式下选中无颜色
  17. 编程学习应用 Growth 发布 3.0,在碎片时间里练习
  18. 易基因|综合DNA甲基化测序揭示前列腺癌死亡率的预后表观遗传生物标志物 | 文献速递
  19. 浅谈一下低频高频时阻抗匹配的重要知识
  20. oracle中skimmer的意思,skimmer to是什么意思

热门文章

  1. 用jQuery提取到input中value值 checked选择器
  2. python股票接口_在Python中使用股票接口
  3. Python-分割PDF文件-如何自定义分割-按页数分割PDF-PyPDF2
  4. GitHub 装逼指南
  5. APP - 支付宝怎么延时转账?能否撤回转账?
  6. 欢迎关注异贝!今天异贝与您一起分享:美容行业异贝引客方案设计!
  7. 微信公众号对接电影网站,回复名称推送电影
  8. 机器学习笔记 - 互信息Mutual Information
  9. 读“人生有一种牛逼,叫我能背下来”
  10. 降维中信息的损失对聚类结果的影响图形化表示