Java图形化设计——AWT绘图

7 绘图

        很多程序如各种游戏都需要在窗口绘制各种图形,除此之外,即使在开发JavaEE项目时,有时候也必须“动态”的向客户端生成各种图形,图表,比如 图形验证码、统计图等,这都需要利用AWT的绘图功能。

7.1 组件绘图原理

之前我们已经学习了很多组件,例如Button、Frame、Checkbox等,不同的组件,展示出来的图形都不一样,其实这些组件展示出来的图形,其本质就是用AWT的绘图来完成的。

        在AWT中,真正提供绘图功能的是Graphics对象,那么Component组件和Graphics对象存在什么关系,才能让Component绘制自身图形呢?

在Component类中,提供了下列三个方法来完成组件图形的绘制与刷新:

paint(Graphics g) 绘制组件的外观
update(Graphics g) 内部调用paint方法,刷新组件外观
repaint() 调用update方法,刷新组件外观

组件绘制图形流程图:

         一般情况下,update和paint方法是由AWT系统负责调用,如果程序要希望系统重新绘制组件,可以调用repaint方法完成。

7.2 Graphics对象的使用

        AWT中提供了Canvas类充当画布,提供了Graphics类来充当画笔,通过调用Graphics对象的setColor()方法可以给画笔设置颜色。

画图的步骤:

        1.自定义类,继承Canvas类,重写paint(Graphics g)方法完成画图;

        2.在paint方法内部,真正开始画图之前调用Graphics对象的setColor(),setFont()等方法设置画笔颜色,字体等属性;

        3.调用Graphics画笔的drawXxx()方法开始画图

下面列出Graphics类中常用的一些方法:

setColor(Color c) 颜色设置
setFont(Font font) 字体设置
drawLine() 绘制直线
drawRect() 绘制矩形
drawRoundRect() 绘制圆角矩形
drawOval() 绘制椭圆形
drawPolygon() 绘制多边形
drawArc() 绘制圆弧
drawPolyline() 绘制折线
fillRect() 填充矩形区域
fillRoundRect() 填充圆角矩形区域
fillOval() 填充椭圆区域
fillPolygon() 填充多边形区域
fillArc() 填充圆弧对应的扇形区域
drawImage() 绘制位图

案例:

        使用AWT绘图API,完成下图效果:

 演示代码:


   
   
   
  1. public class SimpleDraw {
  2. private final String RECT_SHAPE= "rect";
  3. private final String OVAL_SHAPE= "oval";
  4. private Frame frame = new Frame( "这里测试绘图");
  5. Button btnRect = new Button( "绘制矩形");
  6. Button btnOval = new Button( "绘制椭圆");
  7. //定义一个变量,记录当前要绘制椭圆还是矩形
  8. private String shape = "";
  9. //自定义类,继承Canvas类,重写paint(Graphics g)方法完成画图;
  10. private class MyCanvas extends Canvas{
  11. @Override
  12. public void paint (Graphics g) {
  13. //绘制不同的图形
  14. if (shape.equals(RECT_SHAPE)){
  15. //绘制矩形
  16. g.setColor(Color.BLACK); //设置当前画笔的颜色为黑色
  17. g.drawRect( 100, 10, 150, 100);
  18. } else if(shape.equals(OVAL_SHAPE)){
  19. //绘制椭圆
  20. g.setColor(Color.RED);
  21. g.drawOval( 100, 10, 150, 100);
  22. }
  23. }
  24. }
  25. //创建自定义的画布对象
  26. MyCanvas drawArea = new MyCanvas();
  27. public void init (){
  28. //组装视图
  29. btnRect.addActionListener( new ActionListener() {
  30. @Override
  31. public void actionPerformed (ActionEvent e) {
  32. //修改标记的值为rect
  33. shape = RECT_SHAPE;
  34. drawArea.repaint();
  35. }
  36. });
  37. btnOval.addActionListener( new ActionListener() {
  38. @Override
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值