----------------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
void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

public
void run() {

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
void paintComponent(Graphics g) {

//注释掉默认的从父类继承的绘图方法

//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);

//绘制弧线
需要指定 x y 坐标,宽度,高度,起始角度,弧线延长的角度

//绘制时按照逆时针绘制弧线

//

//先画一个矩形,然后以这个矩形的中心为所要画的弧的中心,

//以水平向右为 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));

//绘制直线
需要指定两组 X Y 坐标

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
int[]{350,300,333,366,400}, new
int[]{0,50,100,100,50}, 5);

 

}

 

}

 
 

 
 

 
 

修改 SwingPaintAPI.java(主类) 中的 contentPane 的

声明与实例化方式:

 
 

 
 

 
 

 
 

 
 

 
 


MyPanel.java 中覆盖 JPanel 的 paintComponent() 方法

 
 

右键->Source->Override/Implement Methods->JComponent

 
 

 
 

 
 

运行程序:

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

【made by siwuxie095】

Swing绘图API的更多相关文章

  1. Html5 学习系列(五)Canvas绘图API快速入门(2)

    Canvas绘图API Demos 上一篇文章中,笔者已经给大家演示了怎么快速用Canvas的API绘制一个矩形出来.接下里我会在本文中给各位介绍Canvas的其他API:绘制线条.绘制椭圆.绘制图片 ...

  2. Html5 学习系列(五)Canvas绘图API快速入门(1)

    引言:Canvas绘图API快速入门 在接触HTML5的初学者包括我都在很多地方见到非常炫的一些页面,甚至好多学习HTML5的开发者都是冲着Web端的页游去的,那么HTML5那么绚丽的页面效果以及游戏 ...

  3. 引言:Canvas绘图API快速入门

    引言:Canvas绘图API快速入门 在接触HTML5的初学者包括我都在很多地方见到非常炫的一些页面,甚至好多学习HTML5的开发者都是冲着Web端的页游去的,那么HTML5那么绚丽的页面效果以及游戏 ...

  4. AS3.0绘图API

    AS3.0绘图API: /** * * *-------------------* * | *** 绘图API *** | * *-------------------* * * 编辑修改收录:fen ...

  5. PyQt5绘图API

    PyQt5绘图API大全1.绘图API:绘制文本#1.文本 2.各种图形 3.图像#QPainter painter=QPainter() painter.begin() painter.end() ...

  6. canvas绘图API详解

    canvas绘图API详解 1.context的状态 矩阵变换属性 当前剪辑区域 context的其他状态属性: strokeStyle, fillStyle, globalAlpha, lineWi ...

  7. html5 canvas常用api总结(二)--绘图API

    canvas可以绘制出很多奇妙的样式和美丽的效果,通过几个简单的api就可以在画布上呈现出千变万化的效果,还可以制作网页游戏,接下来就总结一下和绘图有关的API. 绘画的时候canvas相当于画布,而 ...

  8. Cocos2d-x 3.2学习笔记(三)学习绘图API

    关于cocos2d-x 3.2 版本的绘图方法有两种 1.使用DrawNode类绘制自定义图形. 2.继承Layer类重写draw()方法. 以上两种方法都可以绘制自定义图形,根据自己的需要选择合适的 ...

  9. cocos2d-x 3.2 DrawNode 绘图API

    关于Cocos2d-x 3.x 版本的绘图方法有两种: 1.使用DrawNode类绘制自定义图形. 2.继承Layer类重写draw()方法. 以上两种方法都可以绘制自定义图形,根据自己的需要选择合适 ...

随机推荐

  1. chromedriver驱动的浏览器和真实浏览器之间的差异

    一. 打印百度首页底部的声明 如图,想打印@2018 Baidu...后面的一长串文字,可以通过class name定位的形式 可以看出,只有一个class name是"copyright- ...

  2. 关于C++中的pow小记(转)

    昨天在敲一个数位DP的问题,但是用到了这个坑D的问题,找了半天错,还以为又是什么奇怪的算法,结果发现思路一致,然后自己各种YY修改,最后不得不和正确答案比对,但是最后发现标准答案和自己的想法几乎一模一 ...

  3. 太深了,梯度传不下去,于是有了highway。 干脆连highway的参数都不要,直接变残差,于是有了ResNet。 强行稳定参数的均值和方差,于是有了BatchNorm。RNN梯度不稳定,于是加几个通路和门控,于是有了LSTM。 LSTM简化一下,有了GRU。

    请简述神经网络的发展史sigmoid会饱和,造成梯度消失.于是有了ReLU.ReLU负半轴是死区,造成梯度变0.于是有了LeakyReLU,PReLU.强调梯度和权值分布的稳定性,由此有了ELU,以及 ...

  4. python--基本代码规范

    python代码规范:一.标识符 所谓的标识符就是对变量.常量.函数.类等对象起的名字 python语言在任何场景都严格区分大小写!!! python对于标识符的命名有如下规定: 第一个字符必须是字母 ...

  5. Office 2007在安装过程中出错

    1, 可能是因为c:\program files\common files\microsoft Shared\web server Extensions\40\bin目录下缺少Fp4autl.dll, ...

  6. C程序设计语言阅读笔记

    预处理器 ->.i  编译器 >.s 汇编器 >.o 链接器  --可执行文件   ------------------ math.h头文件包含各种数学函数的声明,所有函数都返回一个 ...

  7. url参数的编码解码Demo

    为了保证在页面传递数据的安全性,我们通常会对Url传递的参数进行编码解码操作.我们写一个Demo剖析URL编码解码过程. 完整Demo下载地址 1. Url参数如何在服务端进行编码和解码. 1.1 U ...

  8. BZOJ5118:Fib数列2(O1快速模)

    题意:输入N,输出fib(2^N)%1125899839733759.(P=1125899839733759是素数) 思路:欧拉降幂,因为可以表示为矩阵乘法,2^N在幂的位置,矩阵乘法也可以降幂,所以 ...

  9. Windbg内核调试之四: Dump文件分析

    Dump 文件分析很大程度上就是分析蓝屏产生的原因.这种系统级的错误算是Windows提示错误中比较严重的一种(更严重的还有启动黑屏等硬件或软件兼容性错误等等).说它是比较严重,是因为毕竟Window ...

  10. unix下网络编程之I/O复用(四)

    首先需要了解的是select函数: select函数 #include<sys/select.h> #include<sys/time.h> int select (int m ...