各位好,我用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??如何解决这个问题呢?
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??如何解决这个问题呢?
楼主【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
JFrame里本身就放着根panel,而且是不可少的,它是JPanel类型。不可能直接add到JFrame的。