awt的绘图组件_绘图原理
很多程序如各种游戏需要在窗口中绘制各种图形,除此之外,及时要开发JavaEE项目时,有时候也必须"动态"地向客户端生成各种图形、图标,比如: 图形验证码、统计图等,这都需要利用AWT地绘图功能
组件绘图原理: 之前我们已经学习很多组件,如:Button、Frame、Checkbox等等,不同的组件,展示出来的图形都不一样,其实这些组件展示出来的图形,其本质 就是用AWT的绘图完成
在AWT中,真正提供绘图功能的是Graphics对象,那么Component组件和Graphics对象存在什么关系,才能让Component绘制呢? 在Component类中,提供了下列三个方法来完成组件图案的绘制于刷新:
方法 | 作用 |
---|---|
paint(Graphics g) | 绘制组件的外观 |
update(Graphics g) | 内部调用paint方法,刷新组件外观 |
repaint() | 调用update方法,刷新组件外观 |
注意:一般情况下,update和paint方法是由AWT系统负责调用,如果程序要希望系统重新绘制组件,可以调用repaint方法完成
awt绘图_Graphics组件
Graphics对象的使用: 实际生活中如果需要画图,首先我们得准备一张纸,然后在拿一支笔,配和一些颜色,就可以在纸上画出来各种各样的图形,例如:圆形、矩形等 程序绘图也一样,也需要画布,画笔,颜料等等。AWT中提供了Canvas类充当画布,提供Graphics类来充当画笔,通过调用Graphics对象的setColor()方法可以给画笔设置颜色
画图的步骤 1.自定义类,继承Canvas类,重写paint(Graphics g)方法完成画图 2.在paint方法内部,真正开始画图之前调用Graphics对象的setColor()、setFont()等方法设置画笔的颜色,字体等属性 3.调用Graphics画笔的drawXxx()方法开始画图
其实画图的核心就在使用Graphics画笔在Canvas画布上画出什么颜色、什么样式的图形,什么样式的图形,所以核心在画笔上 下表中列出了Graphics类中常用的一些方法
方法 | 作用 |
---|---|
setColor(Color c) | 设置颜色 |
setFont(Font font) | 设置字体 |
drawLine() | 绘制直线 |
drawRect() | 绘制矩形 |
drawRoundRect() | 绘制圆角矩形 |
drawOval() | 绘制椭圆形 |
drawPolygon() | 绘制多边形 |
drawArc() | 绘制圆弧 |
drawPolylin | 绘制折线 |
fileRect() | 填充圆角矩形区域 |
fillRoundRect() | 填充圆角矩形区域 |
fillOval() | 填充椭圆区域 |
fillPolygon() | 填充多边形区域 |
fillArc() | 填充圆弧对应的扇形区域 |
drawImage() | 绘制位图 |
awt绘图_Graphics组件的练习
xxxxxxxxxx
package ch29;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class a_7_1awt_绘图_Graphics概述 {
//定义一个RECT_SHAPE以及OVAL_SHAPE当点击按钮的时候监听器打开,将二者分别进行赋值操作
private final String RECT_SHAPE = "rect";//成员变量被final修饰,即成员变量此时为常量
private final String OVAL_SHAPE = "oval";
private Frame frame = new Frame("测试绘图");
Button btnReact = new Button("绘制矩形");
Button btnOval = new Button("绘制椭圆");
//定义一个变量,记录当前要绘制椭圆还是矩形
private String shape = "";//当绘制矩形时,shape的值为rect。当绘制椭圆时,shape的值为oval
//1、自定义类,继承Canvas,重写paint(Graphics g)方法完成画图;
private class Mycnvas extends Canvas {
public void paint(Graphics g) {
//绘制不同的图形
if (shape.equals(RECT_SHAPE)) {//当shape的值为RECT_SHAPE,即值为rect时,就执行下面的绘制矩形的代码操作
//绘制矩形
g.setColor(Color.BLACK);//设置当前画笔的颜色
g.drawRect(100, 100, 150, 100);//绘制矩形
} else if (shape.equals(OVAL_SHAPE)) {//当shape的值为OVAL_SHAPE,即值为oval时,就执行下面的绘制矩形的代码操作
//绘制椭圆
g.setColor(Color.RED);
g.drawOval(100, 100, 150, 100);
}
}
}
//创建自定义的画布对象
Mycnvas drawArea = new Mycnvas();
//组装视图
public void init() {
//当我点击绘制矩形的时候,就会执行监听器代码
btnReact.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//将定义的RECT_SHAPE赋值给shape
shape = RECT_SHAPE;
//并且在画布中repaint()
drawArea.repaint();//repaint方法刷新组件外观,即重新绘制
}
});
//当我点击绘制椭圆的时候,就会执行监听器代码
btnOval.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//将定义的OVAL_SHAPE赋值给shape
shape = OVAL_SHAPE;
drawArea.repaint();
}
});
//创建Panel,承载按钮。也就是把按钮放在Panel容器里面
Panel p = new Panel();
p.add(btnOval);
p.add(btnReact);
frame.add(p, BorderLayout.SOUTH);//把Panel容器放到Frame容器的南部
//drawArea画布的大小需要设置
drawArea.setPreferredSize(new Dimension(300, 300));
frame.add(drawArea);//把画布放到Frame容器里面,不写位置参数的话,就是放到中间区域
//frame自适应
frame.pack();
frame.setVisible(true);
//给Frame设置WindowListener监听器,监听用户点击右上角X的动作,则关闭窗口
frame.addWindowListener(new WindowAdapter() {
//采用Java通过的适配器设计模式,我们只需要重写自己需要的方法,例如windowClosing方法,如下
public void windowClosing(WindowEvent e) {
System.exit(0);//原理:退出JVM虚拟机,即退出当前运行的Java程序
}
});
}
public static void main(String[] args) {
new a_7_1awt_绘图_Graphics概述().init();
}
}