有人可以向我解释为什么我需要在此代码中加入repaint()
方法吗?
如果我不这样做,我会收到stackoverflow
错误
private class GamePanel extends JPanel
{
public void paint(Graphics g)
{
super.paint(g);
onPaint(g);
}
}
protected void onPaint(Graphics g)
{
frameRate.calculate();
g.setColor(Color.WHITE);
g.drawString(frameRate.getFrameRate(),30,30);
repaint();
}
答案 0 :(得分:1)
如果我不这样做,我会收到stackoverflow错误
根据提供的代码,我们无法告诉您为什么会出现堆栈溢出。问题可能在于您的一个与frameRate
对象相关的方法。
不要从绘图方法调用repaint()
,这将导致无限的绘制循环。
如果您尝试制作某种动画,那么您应该使用Swing Timer
来安排动画,并在Timer
触发时调用repaint()
。
另外,不要覆盖paint(...)。自定义绘画是通过覆盖paintComponent(...)
来完成的。