我在使用paintComponent()和repaint()时遇到了一个奇怪的问题。 正如你在下面看到的,我有一个paintComponent()
类作为内部类作为我的GUI的主要JPanel。paintComponent()被调用了200次
// add another panel to centerInner
tableBottom = new JPanel() {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (!paintImages.isEmpty()) {
for (PaintImages temp : paintImages) {
g.drawImage(temp.getImage(), temp.getX(), temp.getY(), this);
}
}
if (!extraCards.isEmpty()) {
for (PaintImages temp1 : extraCards) {
g.drawImage(temp1.getImage(), temp1.getX(), temp1.getY(), this);
}
}
}
};
这是一个黑色杰克游戏,有4个玩家的经销商。
初始拉伸的构造:
repaint()
由4个功能调用。 一种更新方法,用于创建要为最初交易打印的对象ArrayList
。 另一种更新方法,为绘制的每张卡创建一个ArrayList
。 并重置清除所有ArrayLists
并重新绘制新的初始交易。
我不会进入后端,但这四种方法中的每一种都只能运行所需的次数。只是每次召唤一次。
我的问题是,当paintComponent
由repaint()
调用,paintComponent()
运行近200倍,不包括乱跑,平均每场比赛一张10倍for
循环。
我的问题是:
1)是一个paintComponent
方法这个共同的行为? PaintComponent是否会一遍又一遍地重复自己,直到所有绘画都已完成?
OR
2),这都与Jpanel tableBottom
办?在这一点上,没有什么实际上被添加到JPanel,因为它是最顶级的JPanel。但也许是paintComponent
反复跑了每一个的JPanel,JFrame的,contentPane中,标签等,
OR
3)难道我做错了什么在我下面的代码?再次通过使用增量和打印语句进行测试,我发现更新方法被调用适当的时间并正确地执行它们的工作。
感谢您的任何帮助。
你的代码看起来不错;问题可能在其他地方。 AFAIK paintComponent每个组件被调用一次,所以它不是增量式的。也许可以使用IDE中的调试器来查看调用堆栈?可能有一个组件行为异常,从paint方法中触发重绘事件。 – Kenney
每当tableBottom被调整大小或每当它获得一次曝光(如果没有backings存储)或每当它的父级重置其位置时,都会调用paintComponent()。多久刷新一次被调用? (只要覆盖它,并让它调用super.repaint())? – FredK
@FredK在最初的抽奖中它被调用一次,之后每张抽奖一次。我删除了我以前的其他2个。 'super.repaint()'会做什么,我会把它放在哪里?因为'paintComponent'是一个内部类,所以我调用了像'tableBottom.paintComponent() –