java绘图之paint(Graphics g)与Graphics g=getGraphics()的两种画笔获取

Java绘图技巧
本文介绍了Java绘图中两种获取Graphics对象的方法:通过paint(Graphics g)方法及Graphics g=getGraphics()方式,并提供了具体示例,帮助读者理解如何在JPanel上绘制图形。

 java绘图是初级程序员需要了解的内容之一,其中利用Graphics对象获取画笔就是比较核心的内容了,而通常获取Graphics对象时有多种方式,例如paint(Graphics g)与Graphics g=getGraphics()的两种方式画笔获取

 1.  paint(Graphics g)

    java绘图时,最常使用到的就是paint(Graphics g){...内容...}方法获取画笔,然后利用JPanel等容器作为画布,在JFrame内呈现出内容,很多情况下这种方式都还是很实用,下附实例:

[java]  view plain  copy
  1. package ?; //?为自定义建包名  
  2. import java.awt.Color;  
  3. import java.awt.Graphics;  
  4. import javax.swing.JFrame;  
  5. import javax.swing.JPanel;  
  6.   
  7. public class Test //Test为自定义的主类名,一般大写  
  8. {  
  9. public static void main(String args[]) {  
  10. JFrame newFrame=new JFrame("funBox");         
  11. newFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   //定义JFrame关闭时的操作(必需),有效避免不能关闭后台当前框体进程的问题      
  12. newFrame.setSize(400400);      //定义JFrame的相关属性  
  13. newFrame.setLocation(200200);  
  14. newFrame.setVisible(true);   
  15. newFrame.add(new FangKuai());     //将需要呈现的图像添加进JFrame中  
  16. }  
  17. }  
  18.   
  19. class FangKuai  extends JPanel //FangKuai  为自定义新建类名  
  20. {  
  21.       
  22. public void paint(Graphics g)  //重写实现panit()方法  
  23. {  
  24. g.setColor(Color.green);   //(0,0)位置绘制一个20*20的绿色方块  
  25. g.fillRect(002020);  
  26. }  
  27. }  


  2.  Graphics g=getGraphics()

   有的时候,需要Graphics对象进行更多的操作(例如下面需要在run()中调用Graphics对象)而不能使用paint(Graphics g)方法,这个时候,就得获取自己定义的Graphics对象来完成需求,下附实例:

[java]  view plain  copy
  1. package ?; //?为自定义建包名  
  2. import java.applet.Applet;  
  3. import java.awt.Color;  
  4. import java.awt.Graphics;  
  5. import javax.swing.JFrame;  
  6. import javax.swing.JPanel;  
  7.   
  8. //以下为一个框体小程序  
  9. public class _001// _001为自定义的主类名  
  10.  {  
  11. public static void main(String[] args) {  
  12. JFrame newFrame=new JFrame("funBox");  
  13. newFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);          //定义JFrame关闭时的操作(必需),有效避免不能关闭后台当前框体进程的问题     
  14. newFrame.setSize(400400);         //定义JFrame的相关属性  
  15. newFrame.setLocation(200200);  
  16. newFrame.setVisible(true);   
  17. newThread n1= new newThread();           //线程的运行,将需要呈现的图像添加进JFrame中  
  18. newFrame.add(n1);  
  19. Thread t1 = new Thread(n1);  
  20. t1.start();  
  21.   
  22. }  
  23. }  
  24.   
  25. class newThread extends JPanel implements Runnable //Java类中只能继承一个类,但是可以实现多个接口,此处newThread 为自定义新建类名  
  26. {  
  27. Graphics g;    //此处定义Graphics对象 g;  
  28. private static final long serialVersionUID = 1L;     
  29. public void run()   //进程run()方法重写  
  30. {    
  31. g=getGraphics();   //Graphics对象 g的获取  
  32. for(int i=0;i<100;)  
  33. {  
  34. try {  
  35. Thread.sleep(2000);  
  36. catch (InterruptedException e) {  
  37. // TODO Auto-generated catch block  
  38. e.printStackTrace();  
  39. }    
  40. this.update(g) ;       //update()方法的调用,刷新图像,使得图像不会重叠显现     
  41. g.setColor(Color.green);   //绘制(0,0)开始移动的20*20绿色小块  
  42. g.fillRect(i, i, 2020);  
  43. i+=20;  
  44. }   
  45. }  

  1. }  

 3.  总结

    简单的调用repaint()方法确实可以完成很多java绘图需求,但是当需要灵活得到Graphics对象时,就必须用getGraphics()获取了,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值