各位帮我看看:
我的JFrame上, 放置一个ScrollPanel, ScrollPanel上再放一个JPanel, 通过重写JPanel的PaintComponent方法(调用很多的g.drawImage)达到显示绘图的目的.问题是: 但绘图很大时, 我draw的Image就会把滚动条遮住了, ScrollBar拉下的时候, 我的menubar上也会出现绘制的图片.谢谢了.
我的JFrame上, 放置一个ScrollPanel, ScrollPanel上再放一个JPanel, 通过重写JPanel的PaintComponent方法(调用很多的g.drawImage)达到显示绘图的目的.问题是: 但绘图很大时, 我draw的Image就会把滚动条遮住了, ScrollBar拉下的时候, 我的menubar上也会出现绘制的图片.谢谢了.
1. JPanel的限制区域不好限定, ScrollBar的高宽跟使用的L&F有关
2. 系统其它地方有要求, 必须将全画面全部绘制出来, 包括隐藏在ScrollPanel中的图片.请问有没有办法解决.
在JPanel的paintComponent中增加
ScrollPane.getHorizontalScrollBar().repaint();
ScrollPane.getVerticalScrollBar().repaint();
ScrollBar确实不会被覆盖了,但...... 里面的绘制的图片还是漏在外围的JFrame上, 导致画面乱的很. :(
那样的话,在paintComponent方法内,调用万了自己的方法以后试试调用paintComponent的super的方法看看
调用完了再super.paintBorder(g), 呵呵,可以保证Border不被覆盖, 但ScrollBar拉下时, menubar上还是有绘制图片的残骸.--> 应该有终极的方案, 而不是这种修修补补吧:将JPanel上的所有绘制彻底陷在SCrollPane中!!
拉动滚动条的时候,产生重绘,这时调用你写的方法,但是这个时候获取的绘制范围大了超出了JPanel,这个是拉动滚动条造成的定位不准,所以看看修改你的绘图方法,绘图之前把JPanel的范围确定下来,也就是确定左上角的x,y坐标,然后绘制
在JScrollPane实现绘制大图, 大图不要越过JScrollPanel就可以了?
谢谢.
不过换成ClipRect不行.将所有的setClip语句删除就没有问题了.