现象:
    我在ScrollPanel里放了一个Panel,目的是在有限的空间里显示出Panel里的全部图像,就是出现滚动条。现在的问题是滚动条出现了,但是拖动滚动条的时候图像出现重影的问题了。而且每拖动一次就增加一些重影的图像。将面板最小化后再还原重影就没了,能正常现实,但是再拖动就又出现那种情况了。我觉得是滚动条滚动时,图像repaint的问题。不知道对不对,也不知道怎么解决,请各位牛人帮个忙。先谢了。

解决方案 »

  1.   

    哦,呵呵sorry,忘了。
    下边是代码:// 主Class里的相关部分。
    JScrollPane baseGraphScrollPane = new JScrollPane(
    JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
    JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    baseGraphScrollPane.setPreferredSize(new Dimension(400,200));BaseGraphPanel baseGraphPanel = new BaseGraphPanel();
    //BaseGraphPanel的定义在下边
    baseGraphPanel.drawGraph(code,baiRiTu,flag,col);
    /*code,baiRiTu,flag,col只是四个参数,判断画哪条线,不画哪条线的,跟刷屏没有关系*/
    baseGraphPanel.setPreferredSize(new Dimension(16000, 400));。



    public class BaseGraphPanel extends JPanel

      ……//变量定义,以及一些跟此问题无关的函数,为了不浪费你的时间,就不贴了
      protected void drawGraph(String code,float []baiRiTu,int []flag,Color []gColor){
                ……//根据参数处理数据,与刷屏无关吧
       repaint();
       }  public void paint(Graphics g){
            Graphics2D g2d = (Graphics2D)g;
            Line2D line;
            Color col = new Color(0,0,0);
            g2d.setColor(col);
            /*画横轴*/
            line = new Line2D.Double(0,390,15990,390);
            g2d.draw(line);
            /*画纵轴*/
            line = new Line2D.Double(15990,390,15990,0);
            g2d.draw(line);
           }
    }
    应该就是这么多有关的代码了,请帮我看看吧。大哥,谢谢啊。
      

  2.   

    以前没做过,不知道跟滚动条滚动事件有没有关系。滚动条滚动时重画吗?那JScrollPane滚动条的触发事件是什么?当初还以为是AdjustmentEvent呢,后来看看原来只是ScrollBar才有的事件。在网上差了半天也没查到,郁闷。
    还有一个问题,我想在点击JScrollPane的滚动条的时候,让图像移动特定的距离——好像跟上一个问题一样了……
    呵呵我问得是不是太多了。没办法,刚刚开始学习,找不到相关资料,望海涵。
      

  3.   

    ??怎么没有人做过吗?大哥们,会的帮帮忙啊。很急啊。Thank you very much.
      

  4.   

    问题出在你没铺地板,所以就容易脏了。
    public class BaseGraphPanel extends JPanel { protected void drawGraph() {
    //BaseGraphPanel继承了JPanel,在显示的时候自动调用paint方法,不用在这里repaint一下
    } public void paint(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;
    g2d.setColor(Color.WHITE); // 调个背景色
    g2d.fillRect(0, 0, 1024, 768); // 铺上地板
    Line2D line;
    Color col = new Color(0, 0, 0);
    g2d.setColor(col);
    /* 画横轴 */
    line = new Line2D.Double(0, 390, 15990, 390);
    g2d.draw(line);
    /* 画纵轴 */
    line = new Line2D.Double(15990, 390, 15990, 0);
    g2d.draw(line);
    }
    }
      

  5.   

    同时,用Panel的话要注意用双缓冲, 否则屏幕可能会一闪一闪,
    用JPanel的话有自动双缓冲的功能的.
      

  6.   

    是因为你在自己的paint中没有调用super.paint
    在paint第一行添加即可