http://www.chinajavaworld.net/forum/forums.cgi?forum=21
有一个画图程序的例子,说的很清楚

解决方案 »

  1.   

    你应该重载paint方法去处理比较好,并且paint方法里面先调用super.paint(g);
    而在鼠标事件里面只要计下鼠标的位置,和是否拖动还是移动等就行了.
    我曾经做过甘特图,有拖动等等处理,而且在很多图(类似ms porject)的情况下都不会闪烁
      

  2.   

    g.drawRect(startX,startY,x-startX,y-startY);////error
            g.drawRect(startX,startY,x-startX,y-startY);
    写错了,应该擦除上一次的图形.
      

  3.   

    各位老大啊,没看清我的要求啊.我这个闪烁不是没实现双缓冲的那个闪烁.在我的图形处理的主程序中,双缓冲,重写paint()方法我都已经已经做到了.我现在的问题是:画一个矩形的时候,那个矩形是要随着鼠标的移动而矩形框随着变化的啊,这个时候根本不能用刷新,这个矩形的下面还有一层别的很大的图,所以这里采用异或模式来画,跟下面的背景图无关了.TO: simonhappy()
    我觉得难实现你讲的那种情况就行了,只擦除上一次画的,始终还留一次当前的,那就矩形框会显示正常了,可如何做啊?
      

  4.   

    g.drawRect(startX,startY,x-startX,y-startY);////error
            g.drawRect(startX,startY,x-startX,y-startY);
    代码效果就是绘制然后马上擦除,就是闪烁的效果.
    当前类留个字段记录鼠标位置.每次先取该字段(上次留下的),绘制矩形(擦除上次图形)
    当前位置记录(下次用),然后绘制当前位置..
      

  5.   

    你对于Java中事件理解不够.鼠标只要移动,就不停的产生鼠标事件.所以你的鼠标监听器就不停的处理.你不用担心次序,当鼠标重A移动到B,产生n个移动事件,这n个事件在系统事件线程中被按照次序发送个组件处理,所以每次处理对应的都是同一个点,你只要注意在监听器中记录位置就OK了.
      

  6.   

    终于明白老兄所说的意思.问题终于解决了,这个问题困扰我个多月了,非常感谢simonhappy()