RT
我在说的清楚一点
比如说,我在一个程序中(我用的是直接继承frame的一个类做的主体,如果您看完了下面的解释认为frame就是不能做这件事,请您给出一个可行的方案,我陈述的都是我试过的一些方法,你可以随意改动,只要实现我说的目的就行~),想实现这样的一件事:当我进行完一次绘图操作后(一般就是调用一次repaint()语句)之后,再进行下一次的绘图操作时,想要留下上一次所绘制的东西,比如,程序画了一条横线,然后就去做别的事了,过一会忽然又想再画一条,希望上一条能保留下来,这时屏幕上出现两条线……,如此下去。
本人试了很多方法,比如重写update(),直接调用paint(),直接用getGraphics()在不经过paint()直接绘图,用一个bufferImage缓冲,但是不是只能绘制一条,就是什么也画不出来……也有可能我哪做得不对,请大家帮帮忙吧~

解决方案 »

  1.   

    建一个bufferImage往bufferImage里面画 每次刷新让bufferImage画到屏上去
      

  2.   

    1楼能给个代码吗?这个方法我用了,没成功- -!代码我的是没法贴了,改的乱七八糟,自己都看不懂了……只是感觉每次bufferImage都被刷新了一样,只能显示一条线……悲剧……
      

  3.   

    看了下src~
    Frame 继承自Container 的Uptate方法    /** 
         * Updates the container.  This forwards the update to any lightweight
         * components that are children of this container.  If this method is
         * reimplemented, super.update(g) should be called so that lightweight
         * components are properly rendered.  If a child component is entirely
         * clipped by the current clipping setting in g, update() will not be
         * forwarded to that child.
         *
         * @param g the specified Graphics window
         * @see   Component#update(Graphics)
         */
        public void update(Graphics g) {
            if (isShowing()) {
                if (! (peer instanceof LightweightPeer)) {
                    g.clearRect(0, 0, width, height);
                }
                paint(g);
            }
        }重写这个方法~  不用清除显示了,直接调paint~public void update(Graphics g) {
        paint(g);
    }
      

  4.   

     
    一楼正解。 通常都这么做。paint方法中,每次都绘制到此buffer中。
      

  5.   

    十分抱歉,一直没来结贴,被人拉出去玩了- -!最后还是用的bufferImage的方法,之前是我钻牛角尖了,一直想用一个父类的数组调用子类的方法画图,
    比如DrawLine继承自Draw
    Draw draw[]=new Draw[1];
    draw[0] =new DrawLine();
    DrawLine和Draw里都有draw方法,
    那draw[0].draw()不就应该是DrawLine中的方法吗?
    编译能过,一执行
    每次都只能在bufferImage上画一条线,悲剧的
    还有DrawLine与Draw中都有一个布尔值,每次调用都不对,明明附了true的值,也会是false,有的地方又变成了true,头都晕了- -!
    算了,这个问题算是解决了,总算是画出重复的线了,结贴了~