各位好,我用JLayeredPane写了一个地图程序,其中地图放在层0,而层1是一个JPanel,JPanel里面添加了数千个JLabel图标,用于地图的标注,我重写了JPanel的paint方法,用于地图改变时(移动,放大,缩小等)时,能够正确显示标注的位置,JPanel的paint方法如下: 
public void paint(Graphics g) 

updateMetaLocation();//更新图标在屏幕上的位置,主要使用JLabel的setLocation来重设JLabel的位置,共有3000个JLabel,用一个for语句进行更新 
super.paint(g); 

这个layeredpane直接add到JFrame中没有问题,但是如果把它先add到JTabbedPane,然后在把JTabbedPane添加到JFrame中就出现问题了,只要一变动地图(移动、放大、缩小等),JPanel就不断的调用paint方法,导致CPU负荷过高,我统计了一下,每变动一次大概要调用(假如我的JLabel个数为3000个),那么就要调用3000次paint方法!如果我是直接把layeredpane添加到JFrame就没有这个问题,每次知调用几次的paint方法,这到底是怎么回事呢?是不是因为JPanel中的JLabel调用setLocation时,导致JTabbedPane发生变更,从而又激发JPanel调用paint??如何解决这个问题呢? 

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【slobbyofhit】截止到2008-08-01 13:25:05的历史汇总数据(不包括此帖):
    发帖的总数量:2                        发帖的总分数:40                       每贴平均分数:20                       
    回帖的总数量:0                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:2                        未结的总分数:40                       
    结贴的百分比:0.00  %               结分的百分比:0.00  %                  
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html

    取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=slobbyofhit
      

  2.   

    你说的直接把它add到JFrame是什么意思?
    JFrame里本身就放着根panel,而且是不可少的,它是JPanel类型。不可能直接add到JFrame的。