本帖最后由 dolphin171 于 2009-07-31 17:59:09 编辑

解决方案 »

  1.   

    大哥,我也是新手,给我点分~~非常感谢
    估计是由于你盖上去以后局部重汇了
    有一个repaint(int,int ,int ,int )
      

  2.   

    所有绘制必须在paint或者paintComponent中完成。
    绘制必须使用保存的数据,而不是临时数据,这样才能保证缩小再变大后,图形可以复原。举例:
    class MyUI{
    int x,y;
      public void paint(Graphics g){
       g.drawLine(0,0,x ,y); //用变量中保存的数据绘制
     }
    }更好的方法是使用MVC设计模式。
      

  3.   

    应该说所有的呈现过程必须在paint或者paintComponent中完成。但是绘制却可以在另外的过程中进行,这里就要用到双缓冲了,楼主可以将鼠标拖拽的线条绘制到一张image里,然后在paint或者paintComponent中呈现这张image。BufferedImage img = new BufferedImage(getWidth(), getHeight(),
    BufferedImage.TYPE_INT_ARGB);
    Gaphics g = img.getGraphics();//在g里绘制线条
    //在这里呈现
    public void paint(Graphics g){ 
        g.drawImage(img, 0, 0, null);

      

  4.   

    顶7楼的做法,使用双缓冲后显示效率得到提高,屏幕闪烁也基本可以消除,还可以把内容直接持久化,如果改进一下,使用List<Image>作为双缓冲源,甚至可以实现Undo/Redo功能。
      

  5.   

    数据很多的话,就得设计好的数据结构,以提高数据存取的性能。
    MVC模式(模型-视图—控制器)可以满足你的要求,网上相关的资料很多。
      

  6.   

    你可以把你画的每条线都存到一个bean里然后让窗口最大化的时候得到bean里的值重新绘制页面
    封装的是线的坐标不过这样做速度可能稍稍慢点