各位帮我看看:
我的JFrame上, 放置一个ScrollPanel, ScrollPanel上再放一个JPanel, 通过重写JPanel的PaintComponent方法(调用很多的g.drawImage)达到显示绘图的目的.问题是: 但绘图很大时, 我draw的Image就会把滚动条遮住了, ScrollBar拉下的时候, 我的menubar上也会出现绘制的图片.谢谢了.

解决方案 »

  1.   

    欧,刚才说错了,在JPanel绘图的时候可以限制一下绘图的区域不要太大了
      

  2.   

    -->cuij7718
    1. JPanel的限制区域不好限定, ScrollBar的高宽跟使用的L&F有关
    2. 系统其它地方有要求, 必须将全画面全部绘制出来, 包括隐藏在ScrollPanel中的图片.请问有没有办法解决.
      

  3.   

    能不能把图像按照当前窗口的大小进行缩放,然后绘出 ,这样图片内容没有丢失,也不至于太大宽度直接取JPanel的宽度,高度看看能不能从JFrame获得,然后减去一个固定的高度得到
      

  4.   

    这个系统的要求是不能缩放的哦, 所以图片要使用ScrollPane, 就是很奇怪啊, ScrollPanel的ScrollBar竟然被"里面的"Image给遮住了
      

  5.   

    遮住了不奇怪的,因为ScrollBar本来就是在JPanel的宽度内的,所以JPanle重绘的时候自然就把ScrollBar遮住了,除非JPanle重绘以后,在把ScrollBar重绘一次,应该可以
      

  6.   

    确实如此:
    在JPanel的paintComponent中增加
    ScrollPane.getHorizontalScrollBar().repaint();
    ScrollPane.getVerticalScrollBar().repaint();
    ScrollBar确实不会被覆盖了,但...... 里面的绘制的图片还是漏在外围的JFrame上, 导致画面乱的很. :(
      

  7.   

    怎样才能将JPanel上绘制的Image, 陷进去呢? 不解啊
      

  8.   

    ",但...... 里面的绘制的图片还是漏在外围的JFrame上, 导致画面乱的很" 这里应该是在拖动滚动条才会有的吧
    那样的话,在paintComponent方法内,调用万了自己的方法以后试试调用paintComponent的super的方法看看
      

  9.   

    调用完了,再super那就将原来的绘制作废了-->试过了,不能解决问题. 
    调用完了再super.paintBorder(g), 呵呵,可以保证Border不被覆盖, 但ScrollBar拉下时, menubar上还是有绘制图片的残骸.--> 应该有终极的方案, 而不是这种修修补补吧:将JPanel上的所有绘制彻底陷在SCrollPane中!!
      

  10.   

    就只能是这样的修补,因为是你改变了他们的绘制顺序不过看情况应该是这样造成的:
    拉动滚动条的时候,产生重绘,这时调用你写的方法,但是这个时候获取的绘制范围大了超出了JPanel,这个是拉动滚动条造成的定位不准,所以看看修改你的绘图方法,绘图之前把JPanel的范围确定下来,也就是确定左上角的x,y坐标,然后绘制
      

  11.   

    请问 ,用没有其它办法可以实现这样的需求呢:
    在JScrollPane实现绘制大图, 大图不要越过JScrollPanel就可以了?
    谢谢.
      

  12.   

    检查有没有调用 Graphics 的 setClip(Shape clip) 或者 setClip(int x, int y, int width, int height) 方法, 如果有,改成 clip(Shape s) 或 clipRect(int x, int y, int width, int height)
      

  13.   

    太感谢了.确实SetClip引起的问题.
    不过换成ClipRect不行.将所有的setClip语句删除就没有问题了.