现象:
我在ScrollPanel里放了一个Panel,目的是在有限的空间里显示出Panel里的全部图像,就是出现滚动条。现在的问题是滚动条出现了,但是拖动滚动条的时候图像出现重影的问题了。而且每拖动一次就增加一些重影的图像。将面板最小化后再还原重影就没了,能正常现实,但是再拖动就又出现那种情况了。我觉得是滚动条滚动时,图像repaint的问题。不知道对不对,也不知道怎么解决,请各位牛人帮个忙。先谢了。
我在ScrollPanel里放了一个Panel,目的是在有限的空间里显示出Panel里的全部图像,就是出现滚动条。现在的问题是滚动条出现了,但是拖动滚动条的时候图像出现重影的问题了。而且每拖动一次就增加一些重影的图像。将面板最小化后再还原重影就没了,能正常现实,但是再拖动就又出现那种情况了。我觉得是滚动条滚动时,图像repaint的问题。不知道对不对,也不知道怎么解决,请各位牛人帮个忙。先谢了。
下边是代码:// 主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);
}
}
应该就是这么多有关的代码了,请帮我看看吧。大哥,谢谢啊。
还有一个问题,我想在点击JScrollPane的滚动条的时候,让图像移动特定的距离——好像跟上一个问题一样了……
呵呵我问得是不是太多了。没办法,刚刚开始学习,找不到相关资料,望海涵。
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);
}
}
用JPanel的话有自动双缓冲的功能的.
在paint第一行添加即可