`
talentluke
  • 浏览: 593198 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Graphics类绘图

 
阅读更多

关于Graphics类的一个结论:Graphics类是所有图形上下文(Graphic context)的抽象基类,因此它是不能直接实例化的,那么为了使用Graphics类绘图,就必须创建其非抽象的子类。
那么我们又如何在这个子类中实现Graphics类(Graphics中定义了很多抽象方法)中的抽象方法呢?
要用这些方法来实现在特定的组件及设备上绘图,而又不能用Graphics类(因为它无法被实例化),怎么做呢?没有办法。甚至连现有的Graphics类的子类也不会用。但我们知道Applet、Canvas、Frame等很多组件类都继承并重载了repaint()方法,而轻量级的repaint()方法又会调用paint(Graphics g)方法。这样,我们通过继承这些组件类,重写其中的paint方法(因为这个方法提供了Graphics类的子类的实例),在这个方法体中完成我们在对应组件上的绘图意图,然后在外部调用repaint()方法(因为它不需要Graphics参数,我们恰恰也不知道怎么创建一个有用的Graphics类的子类及其实例),就可以实现绘图了。
概括起来讲就是:找到一个带有(Graphics g)参数的现有方法和一个自动调用该方法而不带有(Graphics g)参数的现有方法,覆盖前一个方法,在外部调用后一个方法,从而实现绘图目的。
最常见、常用的是paint,paintGraphics和repaint。

 

获取Graphics实例Graphics g = this.getGraphics();

 

 

用java swing画图

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.text.*;
import java.beans.*;

 

public class Yuan{

     public static void main(String[] args) 
     {
         MyFrame my=new MyFrame();   
         my.setVisible(true);   显示
     }
}
class MyFrame extends javax.swing.JFrame
{
    MyFrame()
    {
       this.setTitle("变色圆圈");
       this.setSize(500,500); // 窗体的大小
       mp=new Mypanel();   //实例化一个panel
       this.add(mp);    //加载panel
       clock.start();   
       this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
    }
    private Mypanel mp;
    javax.swing.Timer clock=new javax.swing.Timer(1000,new ActionListener(){
        public void actionPerformed(ActionEvent e)
        {
            mp.repaint();
        }
    });
}
class Mypanel extends javax.swing.JPanel
{
    public   void paintComponent(Graphics g)    //   g是个参数,用g调用Graphics里的方法
    {
        int begin,end;
        begin=0;

        while(begin!=360)
        {
                                                        //Color(int, int, int) 
                                                       //用指定的红、绿和兰色成分创建一个颜色。
          Color c=new Color((int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255));
          g.setColor(Color.red);
                                                                //drawArc(int, int, int, int, int, int) 
                                                                  //绘制一个覆盖指定矩形的圆或椭圆弧的轮廓
          g.drawArc(150,150,200,200,begin,36);
          g.setColor(c);
//fillArc(int, int, int, int, int, int) 
                                      //填充一个覆盖了指定矩形的圆或椭圆弧。
          g.fillArc(150,150,200,200,begin,36);
          begin+=36;
        } 
    }
}

 

绘图板源代码参考 http://www.linuxidc.com/Linux/2011-11/46623p2.htm

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics