> 文档中心 > AWT 绘图(弹球小游戏预备篇)

AWT 绘图(弹球小游戏预备篇)

目录

绘图

Component 组件

Graphics对象

画图步骤

代码展示


       

      之前我们已经学习过很多组件,例如ButtonFrameCheckbox 等等不同的组件,展示出来的图形都不一样,其实这些组件展示出来的图形,其本质就是用AWT的绘图来完成的。今天Nick分享的笔记是关于AWT绘图的,大家一起来看看趴~

    

      

绘图

Component 组件

        

      在AWT中,真正提供绘图功能的是Graphics对象,那么Component组件和Graphics对象存在什么关系,才能让Component绘制自身图形呢?在Component类中,提供了下列三个方法来完成组件图形的绘制刷新 

    

  • paint(Graphics g):绘制组件的外观

  • update(Graphics g):内部调用paint方法,刷新组件外观

  • repaint():调用update方法,刷新组件外观;

    

    

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

           

    

Graphics对象

      实际生活中如果需要画图,首先我们得准备一张纸,然后在拿一支画笔,配和一些颜色,就可以在纸上画出来各种各样的图形,例如圆圈、矩形等等。

      

      程序中绘图也一样,也需要画布画笔颜料等等。

   

在AWT中

  • Canvas类充当画布

  • Graphics类来充当画笔

  • 通过调用Graphics对象的setColor()方法可以给画笔设置颜色。

    

API

     

画图步骤

  1. 自定义类,继承Canvas类,重写paint(Graphics g)方法完成画图;
  2. 在paint方法内部,真正开始画图之前调用Graphics对象的setColor()、 setFont()等方法设置画笔的颜色、字体等属性;
  3. 调用Graphics画笔的drawXxx()方法开始画图。

     

效果展示

   

       

  

代码展示

import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class SimpleDraw {    //标记    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.ORANGE);//设置颜色  g.drawRect(75,75,150,150);     }else if(shape.equals(OVAL_SHAPE)){  //绘制椭圆  g.setColor(Color.GREEN);  g.drawOval(75,75,150,120);     } }    }    //创建自定义的画布对象    MyCanvas drawArea = new MyCanvas();    public void init(){ //组装视图 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,承载按钮 Panel p = new Panel(); p.add(btnOval); p.add(btnRect); frame.add(p,BorderLayout.SOUTH); //drawArea的大小需要设置 //要注意绘制的大小! drawArea.setPreferredSize(new Dimension(300,300)); frame.add(drawArea); frame.pack(); frame.setVisible(true);    }    public static void main(String[] args) { new SimpleDraw().init();    }}

    

结论

      其实画图的核心就在于使用Graphics画笔在Canvas画布上画出什么颜色、什么样式的图形,所以核心在画笔上。

       解决乱码(戳我查看)

今天的绘图预备篇就告一段落啦!

下一篇文章Nick将会正式开始,

弹球小游戏

我们下篇再见!