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()方法. 以上两种方法都可以绘制自定义图形,根据自己的需要选择合适 ...
随机推荐
- 29 python 并发编程之多线程理论
一 什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 车间负责把资源整合 ...
- kylin_异常_02_java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf 解决办法
一.异常现象 在kylin的web管理界面,设置hive数据源时,报错: 查找kylin的日志时发现,弹出提示框的原因是因为出现错误: ERROR [http-bio-7070-exec-10] co ...
- 201621123014《Java程序设计》第六周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 答: 注1:关键词与内容不求多,但概念之间的联系 ...
- JavaScript--收藏栏添加按钮,放大hdu题目字体
觉得HDOJ的题目字体太小了,一波小操作 在收藏栏添加:添加网页->网址改为: javascript: void((function() { var element = document.get ...
- C#异步编程(二)用户模式线程同步
基元线程同步构造 多个线程同时访问共享数据时,线程同步能防止数据损坏.不需要线程同步是最理想的情况,因为线程同步存在许多问题. 第一个问题就是它比较繁琐,而且很容易写错. 第二个问题是,他们会损害性能 ...
- Unity3D for Android 纹理压缩支持
http://blog.csdn.net/asd237241291/article/details/48548557 首先附图:Unity3D for Android支持的纹理压缩格式 纹理压缩可以通 ...
- RabbitMQ入门Demo
之前环境安装已经介绍过了,下面直接跑个Demo. 1.添加Maven依赖 <dependency> <groupId>org.springframework.amqp</ ...
- GPIO编程2:使用GPIO监听中断完整程序
一个完整的使用GPIO捕捉中断的程序: #include<stdlib.h> #include<stdio.h> #include<string.h> #inclu ...
- Pager分页
分页组件: /// <summary> /// 分页组件 /// </summary> public class PagerHelper { /// <summary&g ...
- openwrt 按下回车才能显示图标信息
如题所示,openwrt启动后,手动才能按下系统图标和信息. 如何却掉这个手动选项呢? 修改文件/SISP-L26.7.8-OpenWrt/build_dir/target-arm_uClibc-0. ...