一. Java 2D API
它包含在以下几个包中
java.awt java.awt.geom java.awt.font java.awt.color java.awt.image java.awt.image.renderable java.awt.print
二、Graphics 与 Graphics2D
1. 两者关系
前者是一个抽象类
后者是一个普通类,它是Graphics的扩展,提供Java的二维图形绘制
两者的可用 如下转化
void paint(Graphics g){ Graphics2D g2d = (Graphics2D)g; //下面使用 g2d 绘制图形 }
2. 绘制图形
Java 2D API 中图像轮廓绘制和填充是两个独立的操作
绘制:用一个实现了Stroke接口的对象定义的画笔,来draw画形状轮廓
填充:用一个实现了Paint接口的对象定义的画笔,来Filll填充图形
绘制字符串时:drawString 直接实现填充
如:
//---------------draw-------------------- drawLine(); drawOval(); drawPolygon(); drawPolyLine(); drawRect(); //---------------fill-------------------- fillOval(); fillRect(); fillPolygon(); fillPolyLine();
三、void paint(Graphics g)函数
当一个conponent需要重绘时,就会调用paint函数
我们就可以在这个函数里实现一些绘制代码
四、代码
import java.awt.BorderLayout; import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.*; public class Test_JFrame extends JFrame{ private myPanel p; public Test_JFrame(String name){ super(); //继承父类的构造方法 setTitle(name); //名字 setBounds(0,0,300,300); //大小 BorderLayout bl = new BorderLayout(); bl.setHgap(20); bl.setVgap(20); getContentPane().setLayout(bl);//布局管理 p = new myPanel("jarvischu"); p.setBounds(0, 0, 150, 150); getContentPane().add(p,bl.CENTER); this.setDefaultCloseOperation(EXIT_ON_CLOSE);//设置默认关闭操作 } public static void main(String args[]){ Test_JFrame frame = new Test_JFrame("JarvisChu"); frame.setVisible(true); } } class myPanel extends JPanel{ private String m_Name; public myPanel(String name){ m_Name = name; } public void paint(Graphics g){ Graphics2D g2d = (Graphics2D)g; GradientPaint grdp = new GradientPaint(0,0,Color.blue,100,50,Color.RED); //创建一个渐变填充的对象 g2d.setPaint(grdp); //选中该Paint对象 g2d.fillRect(0, 0, 150, 150); } }