J2SE提供了一组应用程序接口(API),用于处理2D图形,主要功能如下:
(1)绘制和填充简单及复杂的形状
(2)裁剪、合成图形及透明度
(3)对图形进行各种几何变换
(4)对高级字体进行处理并对字符串进行格式化
Java2D API中对图形处理的类:
1.Graphics类
2.Graphics2D类
3.Shape类(抽象类)
绘制几何图形 - 线段
Java2D支持对图形的绘制,包括绘制线段,矩形,椭圆,多边形等几何形状。使用Java2D API进行图形绘制的主要步骤如下。
(1)建立应用程序主类。
(2)生成Frame对象和Panel对象,并将Panel对象添加到Frame对象中。
(3)重载Panel对象中的paint()方法,在其中添加绘制图形的代码。
(4)在mian()方法中对应用程序主类进行实例化。
以下代码用于建立图形绘制的基本框架
//建立图形绘制程序框架
import java.awt.*;
import javax.swing.*;
class MyPanel extends JPanel{ //定义绘图类MyPanle
public void paint(Graphics g) { //重载paint()方法
}
}
public class DrawFrame extends JFrame { //定义主类继承JFrame
public DrawFrame(){
MyPanel mp = new MyPanel();
this.add(mp); //将MyPanel对象添加到JFrame里面
this.setTitle("my app"); //设置标题
this.setSize(400, 400); //设置大小
this.setLocation(400, 400); //设置位置
this.setVisible(true); //用于显示主界面
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new DrawFrame(); //对主程序进行实例化
}
}
Java2D API提供的图形绘制方法具体可分为两类:
一是通过图形对象直接绘制,
二是通过Graphics2D对象进行间接绘制。
前者比较简洁,后者需要先生成一个Shape对象,然后对其绘制。
1.使用图形对象绘图的步骤
(1)获取Graphics对象
(2)设置绘图效果(颜色,边框等)
(3)调用Graphics的绘图方法
程序如下:
public void paint(Graphics g){//重载paint()方法
// 1.使用图形
g.setColor(Color.BLUE); //设置颜色
g.drawLine(2,2,300,260); //调用图形的线段绘制方法从(2,2)到(300260)
}
2.使用Graphics2D的对象绘制一条线段
(1)获取的的的的的Graphics2D的对象
(2)建立几何图形对象(需要导入的java.awt.geom包,包中定义了各种Shape对象)
(3)设置绘图效果(颜色,边框等)
(4)调用Graphics2D的draw()方法
程序如下:
public void paint(Graphics g){//重载paint()方法
// 2.使用的Graphics2D
Point2D p1 =新的Point2D.Double(50,50); //起点(50,50)
Point2D p2 = new Point2D.Double(200,200); //终点(200,200)
Line2D line = new Line2D.Double(p1,p2);
Graphics2D g1 =(Graphics2D)g; //获取Graphics2D的对象
g1.setColor(Color.BLUE); //设置颜色
g1.draw(线); //调用的Graphics2D的绘图方法
}
填充图形
Java2D图形填充的方式与图形绘制的方式类型,也可以通过Graphics对象或Graphics2D对象完成。
1.使用Graphics对象填充图形的步骤:
(1)获得Graphics对象
(2)设置填充效果
(3)调用Graphics的填充方法
程序如下:
public void paint(Graphics g){
g.setColor(Color.BLUE); //设置填充颜色
g.fillRect(20,30,300,220); //调用图形的矩形填充方法
}
2.使用Graphics2D对象填充图形的步骤:
(1)获得Graphics2D对象
(2)建立几何图形对象
(3)设置填充效果
(4)调用Graphics2D的fill()方法
使用Graphics2D进行图形填充时不仅能使用单色填充,而且可以实现颜色渐变的填充效果,这需要借助GradientPaint对象实现。
代码如下:
public void paint(Graphics g){//重载paint()方法
//颜色渐变
Rectangle2D rec = new Rectangle2D.Double(20,40,300,220); //建立矩形对象
Graphics2D g2 =(Graphics2D)g; //获取的Graphics2D对象
GradientPaint blueToRed = new GradientPaint(0,0,Color.BLUE,200,150,Color.RED);
g2.setPaint(blueToRed); //设置渐变填充对象
g2.fill(REC); //调用的的的的Graphics2D的填充方法
}
Java2D API中提供了图形的几何变换功能,这主要是通过AffineTransform类实现的。该类描述了一种二维仿射变换的功能,他是一种二维坐标到二维坐标之间的线性转换,保持二维图形的“平直性”和“平行性”。仿射变换可以通过一系列发原子变换的复合来实现,包括平移(Translation)、缩放(Scale)、翻转(Filp)、旋转(Rotation)和错切(Shear)。
实现步骤:
(1)建立AffineTransform对象
(2)设置变换过程
(3)在Graphics2D对象上应用变换
(4)调用Graphics2D对象的draw()方法绘制图形
代码如下:
public void paint(Graphics g) { //重载paint()方法
//通过AffineTransform对象实现各种变换效果
Rectangle2D rec = new Rectangle2D.Double(10,10,30,30);
Graphics2D g3 = (Graphics2D)g;
AffineTransform at = new AffineTransform(); //建立图形变换对象
at.setToTranslation(50, 50); //设置平移变换
at.rotate(Math.PI/8.0); //设置旋转变换
at.setToShear(2.0, 2.0); //设置错切变换
at.scale(2.0, 2.0); //设置缩放变换
g3.setTransform(at); //在Graphics2D对象上应用变换
g3.setColor(Color.BLUE);
g3.draw(rec);
}
运行效果: