AWT
绘图
很多程序如各种游戏都需要在窗口中绘制各种图形,在开发一些项目的时候有时也需在客户端向用户展示各种图形、图表等,比如图形验证码、统计图等,这都需要利用AWT的绘图功能。
程序中的绘图和现实中绘图一样,也需要画布,画笔,颜料等等。AWT中提供了Canvas类充当画布,提供了Graphics类充当画笔,通过调用Graphics对象的setColor()方法可以给画笔设置颜色。
Graphics类中常用方法
方法 | 功能 |
---|---|
setColor(Color c) | 设置颜色 |
setFont (Font font) | 设置字体 |
drawLine() | 绘制直线 |
drawRect() | 绘制矩形 |
drawRoundRect() | 绘制圆角矩形 |
drawOval() | 绘制椭圆形 |
drawPolygon() | 绘制多边形 |
drawArc() | 绘制圆弧 |
drawPolyline() | 绘制折线 |
fillRect() | 填充矩形区域 |
fillRoundRect() | 填充圆角矩形区域 |
fillOval | 填充椭圆区域 |
fillPolygon() | 填充多边形区域 |
fillArc() | 填充圆弧对应的扇形区域 |
drawlmage() | 绘制位图 |
代码示例1:
使用awt绘图,实现以下界面:
import javax.imageio.stream.ImageInputStream;
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 SimpleDemo {
private final String RECT_SHAPE="rect";
private final String OVAL_SHAPE="oval";
private Frame frame=new Frame("这里测试绘图");
Button btnRect=new Button("绘制矩形");
Button btnOval=new Button("绘制椭圆");
//定义一个变量,记录当前要绘制椭圆还是矩形
private String shape="";
//自定义类,继承Canvas,重写paint(Graphics g)方法完成画图;
private class MyCanvas extends Canvas{
@Override
public void paint(Graphics g) {
//绘制不同的图形
if(shape.equals(RECT_SHAPE)){
//绘制矩形
g.setColor(Color.BLACK);//设置当前画笔的颜色为黑色
g.drawRect(100,100,150,200);
}else if(shape.equals(OVAL_SHAPE)){
//绘制椭圆
g.setColor(Color.RED);
g.drawOval(100,100,150,200);
}
}
}
//创建自定义的画布对象
MyCanvas drawArea=new MyCanvas();
public void init(){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//组装视图
btnRect.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//修改标记值为rect
shape=RECT_SHAPE;
drawArea.repaint();
}
});
btnOval.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//修改标记值为oval
shape=OVAL_SHAPE;
drawArea.repaint();
}
});
Panel p=new Panel();
p.add(btnRect);
p.add(btnOval);
frame.add(p,BorderLayout.SOUTH);
//设置画布的大小
drawArea.setPreferredSize(new Dimension(400,400));
frame.add(drawArea);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new SimpleDemo().init();
}
}
运行结果: