Swing绘图API
----------------siwuxie095
工程名:TestSwingPaintAPI
包名:com.siwuxie095.swingpaint
类名:SwingPaintAPI.java(主类)、MyPanel.java
向 com.siwuxie095.swingpaint 包中放入图像文件:img.png
工程结构目录如下:

SwingPaintAPI.java(主类):
|
package com.siwuxie095.swingpaint; import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.border.EmptyBorder; public class SwingPaintAPI extends JFrame { //将原本声明的 JPanel 注释掉,改为 MyPanel //private JPanel contentPane; private MyPanel contentPane;
/** * Launch the application. */ public static EventQueue.invokeLater(new Runnable() { public try { SwingPaintAPI frame = new SwingPaintAPI(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public SwingPaintAPI() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300);
//将原本的实例化方式注释掉,改为 MyPanel() //contentPane = new JPanel(); contentPane=new MyPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPane.setLayout(new BorderLayout(0, 0)); setContentPane(contentPane); } } |
MyPanel.java:
|
package com.siwuxie095.swingpaint; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JPanel; //MyPanel 继承自 JPanel public class MyPanel extends JPanel {
//创建一个 BufferedImage BufferedImage image=null;
public MyPanel() {
try { //使用 ImageIO.read()读取图像,传入 URL //可以是本地图像,也可以是网络图像 //这里读取本地图像,因为使用的是 getClass().getResource() //所以 img.png 必须和调用的类 MyPanel 在同一个包中 //有异常抛出,使用 try catch 捕获 image=ImageIO.read(getClass().getResource("img.png"));
} catch (IOException e) { e.printStackTrace(); } }
//覆盖 JPanel 的 paintComponent() 方法, //右键->Source->Override/Implement Methods->JComponent //对于每一个组件来说,paintComponent() 方法是绘制组件本身 //传入 Graphics,通过它在界面绘制图像 @Override protected //注释掉默认的从父类继承的绘图方法 //super.paintComponent(g);
//最常用的绘图方法,很多是以 draw 和 fill 开头的 //draw 方法绘制的都是线框、轮廓(空心),而 fill 方法绘制的是填充的图像(实心) //对于一般的 draw 方法,都会有对应的 fill 方法(空心对实心)
//先使用 setColor() 为当前的绘图指定颜色 //使用匿名对象,创建一个新的Color对象 //可以为不同的形状填充不同的颜色 g.setColor(new Color(255,0,0));//红色
//绘制方块,需要指定 X Y 坐标,宽度,高度 // 0 0 即从左上角开始绘制 g.drawRect(0, 0, 100, 100);
//也可以使用静态方法通过类调用 g.setColor(Color.GREEN); //绘制圆形、椭圆形,需要指定 X Y 坐标,宽度,高度 //如果宽高一致,绘制的就是圆形 g.drawOval(0, 0, 100, 100);//圆形 g.setColor(Color.BLUE); g.drawOval(0, 25, 100, 50);//椭圆形
g.setColor(Color.ORANGE); //填充方块,需要指定 X Y 坐标,宽度,高度 g.fillRect(100, 100, 100, 100);
//填充带圆角效果的方块,需要指定 X Y 坐标,宽度,高度,圆角的弧宽,圆角的弧高 //一般情况下,将圆角的弧宽,圆角的弧高,两个弧度值设置成相等 //弧宽越大,则 X 方向上圆角越长,弧高越大,则 Y 方向上圆角越长 //弧宽与弧高指定了 X Y 方向上圆角的大小 g.fillRoundRect(200, 0, 100, 100, 10, 10); g.fillRoundRect(300, 100, 100, 100, 200, 50);
//绘制 String,需要指定 X Y 坐标 //绘制 Bytes Chars 同 String //设置颜色与字体 g.setColor(Color.YELLOW); g.setFont(new Font("Arial", Font.BOLD, 20)); g.drawString("TestAPI", 110, 50);
g.setColor(Color.CYAN); //绘制弧线 //绘制时按照逆时针绘制弧线 // //先画一个矩形,然后以这个矩形的中心为所要画的弧的中心, //以水平向右为 0 度,逆时针为正方向 g.drawArc(0, 200, 100, 100, 270, 90); g.fillArc(0, 200, 100, 100, 0, 270); g.fillArc(100, 200, 100, 200, 0, 90); g.drawArc(100, 200, 100, 200, 90, 90); g.fillArc(200, 200, 200, 200, 30, 120);
g.setColor(new Color(0,0,0)); //绘制直线 g.drawLine(200, 100, 300, 200);
//绘制图像,选择传参最少的方法 //需要指定:图像对象image,X Y 坐标,observer(可指定为空) //对于 image 可以在构造函数 MyPanel() 中加载图像 if (image!=null) { g.drawImage(image, 0, 100, null); //绘制图像时可以指定图像的大小 }
//绘制多边形,传入一组 X 坐标,一组 Y 坐标,和 g.fillPolygon(new
}
} |
修改 SwingPaintAPI.java(主类) 中的 contentPane 的
声明与实例化方式:


在
MyPanel.java 中覆盖 JPanel 的 paintComponent() 方法
右键->Source->Override/Implement Methods->JComponent
运行程序:

【made by siwuxie095】
Swing绘图API的更多相关文章
- Html5 学习系列(五)Canvas绘图API快速入门(2)
Canvas绘图API Demos 上一篇文章中,笔者已经给大家演示了怎么快速用Canvas的API绘制一个矩形出来.接下里我会在本文中给各位介绍Canvas的其他API:绘制线条.绘制椭圆.绘制图片 ...
- Html5 学习系列(五)Canvas绘图API快速入门(1)
引言:Canvas绘图API快速入门 在接触HTML5的初学者包括我都在很多地方见到非常炫的一些页面,甚至好多学习HTML5的开发者都是冲着Web端的页游去的,那么HTML5那么绚丽的页面效果以及游戏 ...
- 引言:Canvas绘图API快速入门
引言:Canvas绘图API快速入门 在接触HTML5的初学者包括我都在很多地方见到非常炫的一些页面,甚至好多学习HTML5的开发者都是冲着Web端的页游去的,那么HTML5那么绚丽的页面效果以及游戏 ...
- AS3.0绘图API
AS3.0绘图API: /** * * *-------------------* * | *** 绘图API *** | * *-------------------* * * 编辑修改收录:fen ...
- PyQt5绘图API
PyQt5绘图API大全1.绘图API:绘制文本#1.文本 2.各种图形 3.图像#QPainter painter=QPainter() painter.begin() painter.end() ...
- canvas绘图API详解
canvas绘图API详解 1.context的状态 矩阵变换属性 当前剪辑区域 context的其他状态属性: strokeStyle, fillStyle, globalAlpha, lineWi ...
- html5 canvas常用api总结(二)--绘图API
canvas可以绘制出很多奇妙的样式和美丽的效果,通过几个简单的api就可以在画布上呈现出千变万化的效果,还可以制作网页游戏,接下来就总结一下和绘图有关的API. 绘画的时候canvas相当于画布,而 ...
- Cocos2d-x 3.2学习笔记(三)学习绘图API
关于cocos2d-x 3.2 版本的绘图方法有两种 1.使用DrawNode类绘制自定义图形. 2.继承Layer类重写draw()方法. 以上两种方法都可以绘制自定义图形,根据自己的需要选择合适的 ...
- cocos2d-x 3.2 DrawNode 绘图API
关于Cocos2d-x 3.x 版本的绘图方法有两种: 1.使用DrawNode类绘制自定义图形. 2.继承Layer类重写draw()方法. 以上两种方法都可以绘制自定义图形,根据自己的需要选择合适 ...
随机推荐
- Memcache 笔记(2)
一.Memcache概述出现的原因:随着数据量的增大,访问的集中,使得数据库服务器的负担加重,数据库响应恶化,网站显示延迟等 memcache:是高性能的分布式内存缓存服务器.通过缓存数据库的查询结果 ...
- 下载 OS X 10.11 GM
不清楚为什么OS X 10.11 GM版本是Coming Soon,可以通过下面简单方法启用App Store下载. 在终端执行: $ sudo softwareupdate --clear-cata ...
- Java面试题下
这部分主要是开源Java EE框架方面的内容,包括hibernate.MyBatis.spring.Spring MVC等,由于Struts 2已经是明日黄花,在这里就不讨论Struts 2的面试题, ...
- C++中内部类访问外部类的私有成员
首先,如果不知道什么是内部类InnerClass的话,就没必要往下看了. 尝试在C++中模仿apple objective-c 的Grand Dispatch简化多线程编程时,使用了boost::fu ...
- 【Prism】MEF版HelloWorld
引言 Pirsm框架是由微软P & P小组设计的,用于构建组合式的WPF企业级应用,支持两个IOC容器,分别为Unity和MEF.官方地址为http://compositewpf.codepl ...
- 唯一id UUID
public static String getUUID() { String s = UUID.randomUUID().toString(); return s.substring(0, 8) + ...
- 剑指offer--5.变态跳台阶
WA了一次,错误数据4,输出8,怎么真么熟悉呢?改个return过了,OMG ------------------------------------------------------------- ...
- 2018.7.27 wireless charger TX evaluation kit based on STWBC-EP
1 introduced 我们需要设计一个无线充电方案: 功能需求:通用的无线充电平台 参数要求:8-10W step1: 找寻资料 http://www.ti.com/sitesearch/doc ...
- C#进阶之路(四):拉姆达
对于拉姆达,许多文章都讲过原理及如何使用,所以这篇文章我主要是摘录我学习过的文字,总结下我自己的学习心得. 什么是拉姆达表达式 "Lambda表达式"是一个匿名函数,是一种高效的类 ...
- C# 读xml注释或过滤xml注释
有这么个需求: 要统计所有的配置文件,这些配置文件都xml格式,并把这些配置写到数据表里,如果有注释要把这些注释写到对应配置对象的描述字段上 <item id="" key= ...