首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

重绘的兑现

2013-05-02 
重绘的实现在以前制作的简单画板中,每当变动窗体时画出的图形都会消失,这个问题就需要通过重绘来实现。重绘

重绘的实现
在以前制作的简单画板中,每当变动窗体时画出的图形都会消失,这个问题就需要通过重绘来实现。
重绘的原理:屏幕上的所有东西事实上都是由一个个的点绘制而成,包括窗体本身。JFrame类中有一个方法paint(),每当打开窗体时系统都会自动调用这个方法,把窗体画出来。

那么要想在窗体变动时窗体上画出的图案和窗体一样仍然存在,可以在定义时重写paint()的方法,在其中写上画这些图形的方法。这样,就需要从事件处理类中获得一些坐标,由于坐标的数量不定,而且画的基本图形不定,可以用队列存储这些信息。队列中的每个元素是一个数组,用数组中的第一个元素存储画的基本图形。

  1、在事件处理类中,定义一个队列作为属性,存储坐标
  2、在写绘制方法时,每次画基本图形时都新建一个数组存储坐标,把数组加入队列,同时用数组中指定的元素表示基本图形的种类(比如下面的例子中我用每个数组的第一个元素表示图形的种类)
  3、在paint()方法中调用事件处理类中队列的数据,根据表示图形种类的元素的值绘制图形

如下是重绘谢尔宾斯基地毯的部分代码:
1、在事件处理类中,定义一个队列作为属性,存储坐标

/** * 重写JFrame中的paint方法 */public void paint(Graphics g){super.paint(g); for(int i=1;i<=Listener.mylinklist.size();i++){        ListNode<int[]> array=Listener.mylinklist.getNode(i);        int[] a=array.getData();        if(a[0]==21){        g.setColor(Color.BLACK);        g.drawRect(a[1]+200,a[2],a[3],a[4]);        }else if(a[0]==31){        g.setColor(Color.BLACK);        g.fillRect(a[1]+200,a[2],a[3],a[4]);        }else if(a[0]==20){        g.setColor(Color.WHITE);        g.drawRect(a[1]+200,a[2],a[3],a[4]);        }        }}

热点排行