---------------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.BasicStroke;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.RenderingHints;

import java.awt.image.BufferedImage;

import java.io.IOException;

 
 

import javax.imageio.ImageIO;

import javax.swing.JPanel;

 
 

//使用 Java 2D 完成界面的绘图优化

 
 

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

 

//如果不使用 Java 2D,使用普通的绘图API,

//则绘制的图像有很明显的锯齿

 

 

//创建一个 Graphics2D 对象:g2d,需要强转

//g2d 支持的属性和方法更多

Graphics2D g2d=(Graphics2D) g;

 

//图像渲染的提示,提示值代表了当前的绘图是否支持锯齿消除

//传入键值对,为Graphics2D添加抗锯齿

//(通过类调用静态值)

g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

 

 

//Graphics2D 完全兼容 Graphics 的一些方法,包括 draw 和 fill 方法

//draw 方法绘制的都是线框、轮廓(空心),而 fill 方法绘制的是填充的图像(实心)

//对于一般的 draw 方法,都会有对应的 fill 方法(空心对实心)

 

//Graphics2D 的 setClip() 方法

//需要指定 X Y 坐标,宽度,高度

//指定绘制图像的区域,超出就不会被绘制

g2d.setClip(0, 0, 500, 500);

 

 

//先使用 setColor() 为当前的绘图指定颜色

//使用匿名对象,创建一个新的Color对象

//可以为不同的形状填充不同的颜色

g2d.setColor(new Color(255,0,0));//红色

 

 

//绘制方块,需要指定 X Y 坐标,宽度,高度

// 0 0 即从左上角开始绘制

g2d.drawRect(0, 0, 100, 100);

 

 

//也可以使用静态方法通过类调用

g2d.setColor(Color.GREEN);

//绘制圆形、椭圆形,需要指定 X Y 坐标,宽度,高度

//如果宽高一致,绘制的就是圆形

g2d.drawOval(0, 0, 100, 100);//圆形

g2d.setColor(Color.BLUE);

g2d.drawOval(0, 25, 100, 50);//椭圆形

 

 

g2d.setColor(Color.ORANGE);

//填充方块,需要指定 X Y 坐标,宽度,高度

g2d.fillRect(100, 100, 100, 100);

 

 

//填充带圆角效果的方块,需要指定 X Y 坐标,宽度,高度,圆角的弧宽,圆角的弧高

//一般情况下,将圆角的弧宽,圆角的弧高,两个弧度值设置成相等

//弧宽越大,则 X 方向上圆角越长,弧高越大,则 Y 方向上圆角越长

//弧宽与弧高指定了 X Y 方向上圆角的大小

g2d.fillRoundRect(200, 0, 100, 100, 10, 10);

g2d.fillRoundRect(300, 100, 100, 100, 200, 50);

 

 

//绘制 String,需要指定 X Y 坐标

//绘制 Bytes Chars 同 String

//设置颜色与字体

g2d.setColor(Color.YELLOW);

g2d.setFont(new Font("Arial", Font.BOLD, 20));

g2d.drawString("TestAPI", 110, 50);

 

 

g2d.setColor(Color.CYAN);

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

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

//

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

//以水平向右为 0 度,逆时针为正方向

g2d.drawArc(0, 200, 100, 100, 270, 90);

g2d.fillArc(0, 200, 100, 100, 0, 270);

g2d.fillArc(100, 200, 100, 200, 0, 90);

g2d.drawArc(100, 200, 100, 200, 90, 90);

g2d.fillArc(200, 200, 100, 200, 30, 120);

 

 

 

//绘制图像,选择传参最少的方法

//需要指定:图像对象image,X Y 坐标,observer(可指定为空)

//对于 image 可以在构造函数 MyPanel() 中加载图像

if (image!=null) {

g2d.drawImage(image, 0, 100, null);

//绘制图像时可以指定图像的大小

}

 

 

//绘制线段时,线段可以指定粗细等属性

//第一个参数是线段的粗细,

//第二个参数 CAP 表示线段头部的形状(圆/方等)

//第三个参数 JOIN 表示线段曲折的地方的形状(尖/圆等)

g2d.setStroke(new BasicStroke(5,BasicStroke.CAP_SQUARE,BasicStroke.JOIN_ROUND));

 

 

g2d.setColor(new Color(0,0,0));

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

g2d.drawLine(205, 105, 300, 200);

 

 

//绘制多边形,传入一组 X 坐标,一组 Y 坐标,和
坐标数目

g2d.fillPolygon(new
int[]{350,300,333,366,400}, new
int[]{0,50,100,100,50}, 5);

g2d.drawPolygon(new
int[]{350,300,333,366,400}, new
int[]{200,250,300,300,250}, 5);

 

}

 

}

 
 

 
 

 
 

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

声明与实例化方式:

 
 

 
 

 
 

 
 

 
 

 
 


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

 
 

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

 
 

 
 

 
 

运行程序:

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

【made by siwuxie095】

使用Java2D改善API的绘制效果的更多相关文章

  1. 系统API执行没效果,可以检查一下是否与 360安全卫士 有关?!

    今天在写一个工具软件,使用到一个系统API: mouse_event() 代码如下: mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE,  x2, ...

  2. 【高德地图API】绘制大地线 Geodesic/Great Circles

    大地线(geodesic)是指地球椭球面上连接两点的最短程曲线. 大地线上每点的密切面(无限接近的3个点所构成的平面)都包含此点的曲面法线.因曲面法线互不相交,故为一条空间曲面曲线.在球面上,大圆弧( ...

  3. WPF中如何使用图像API进行绘制

    首先,由于WPF中不象GDI+中有Graphics对象,因此你无法使用Graphics进行绘图了,取而代之的是:DrawingContext:类似地,GDI+中的OnPaint已被OnRender取代 ...

  4. 11-Java 界面设计

    (一)Java界面设计概述 1.Java 界面设计的用途 2.AWT 简介 (1)Abstract Windows Toolkit 是最原始的工具包. 3.Swing 简介 4.SWT 简介 5.如何 ...

  5. 在谷歌地图上绘制行政区域轮廓【结合高德地图的API】

    实现思路: 1.利用高德地图行政区域API获得坐标列表 2.将坐标列表绘制在谷歌地图上[因为高德地图和国内的谷歌地图都是采用GCJ02坐标系,所有误差很小,可以不进行坐标误差转换] 注意点: 1.用百 ...

  6. 记录开发基于百度地图API实现在地图上绘制轨迹并拾取轨迹对应经纬度的工具说明

    前言: 最近一直在做数据可视化方面的工作,其中平面可视化没什么难度,毕竟已经有很多成熟的可供使用的框架,比如百度的echart.js,highcharts.js等.还有就是3D可视化了,整体来说难度也 ...

  7. HTML5在canvas中绘制复杂形状附效果截图

    HTML5在canvas中绘制复杂形状附效果截图 一.绘制复杂形状或路径 在简单的矩形不能满足需求的情况下,绘图环境提供了如下方法来绘制复杂的形状或路径. beginPath() : 开始绘制一个新路 ...

  8. canvas绘制图像轮廓效果

    在2d图形可视化开发中,经常要绘制对象的选中效果. 一般来说,表达对象选中可以使用边框,轮廓或者发光的效果.  发光的效果,可以使用canvas的阴影功能,比较容易实现,此处不在赘述. 绘制边框 绘制 ...

  9. Java 2D API - 1. 基本概念

    Java 2D API扩展AWT包,对二维图形.文本及成像功能提供了支持,可用于开发复杂的界面.绘图软件和图像编辑器.Java 2D对象位于用户坐标空间(User coordinate space), ...

随机推荐

  1. 如何做好App的测试工作

    记得刚开始接触app测试时,可谓是一脸懵状,拿到一个功能不知道该测些什么,会因为测试范围确认不足.测试点考虑不全等导致线上问题,吃一堑才会长一智,栽过几次坑后就学会了如何避免.现总结App测试点如下, ...

  2. 如何下载中文语言包让Eclipse汉化?

    Eclipse软件是JAVA开发必备的软件,对于英语不好的人而言面对英文代码还好,但是软件也是英语的那就头疼了,怎么解决?可以去官网下载中文语言包解压到Eclipse安装目录就可以汉化了.   工具/ ...

  3. LeetCode OJ:Triangle(三角形)

    Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...

  4. New Concept English three (57)

    28w/m 54errors I stopped to let the car cool off and to study the map. I had expected to be near my ...

  5. 使用range()生成自然数序列

  6. qduoj su003 数组合并

    描述 现在呢有两个整形数组,a[n]和b[m],而且已经知道这两个数组都是非降序数组.现在呢就有一个工作需要你来完成啦.对于a中的每个元素a[i]在b中寻找<=a[i] 的元素个数,个数记为x[ ...

  7. verilog学习五点经验分享

    1.规范很重要工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计(无论软件还是硬件),不按照规范走几乎是不可实现的.逻辑设计也是这样:如果不按规范做的话,过一个月后调试时发现有错,回头再看 ...

  8. IDEA 设置导出

    见附件 https://files.cnblogs.com/files/chuancheng/settings.7z

  9. java代码继承super

    总结:多态 :. 当重写父类的方法的时,子类对象名可以调用父类的方法,以及不带参的构造方法 package com.addd; public class rr { int a, b; String c ...

  10. 愿天下有情人都是失散多年的兄妹(bfs)

    L2-016. 愿天下有情人都是失散多年的兄妹 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 呵呵.大家都知道五服以内不得通婚 ...