gpt4 book ai didi

java - PaintComponent 方法运行了 3 次

转载 作者:行者123 更新时间:2023-12-01 17:13:07 25 4
gpt4 key购买 nike

有点奇怪的问题。

我有一个“Circles”的ArrayList,我在绘图面板中绘制了它,但在绘制它们之前,它们会通过一种方法进行验证,该方法检查它们是否在面板内,这意味着100个在面板的范围内。通过此“drawn()”方法的圆的数量由我的 CirclesDrawn 整数变量进行计数,然后在该方法的后面打印在控制台中。

我在paintComponent方法中打印数据,以便它正确同步,因为我在驱动程序主方法中这样做时遇到问题。但是,当我的程序运行时,此数据被打印三次,第二次和第三次 CirclesDrawn 变量的值分别是两倍和三倍。

有什么方法可以防止这种情况发生,或者任何人都可以给我任何有用的指导来纠正这个问题?

我只附加了paintComponent方法,以避免将整个项目转储到这里,但如果需要更多上下文,我可以轻松提供它。

@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);

for (int i = 0; i < circles.size(); ++i)
{
if (circles.get(i).drawn(DEFAULT_WIDTH, DEFAULT_HEIGHT) == true)
{
circles.get(i).draw(g);

circlesDrawn++;
}
}

System.out.println("Number of circles drawn: " + circlesDrawn);
}

预先感谢您的帮助。

最佳答案

Is there a way of preventing this from happening?

不,而且您不想尝试这样做。意识到您无法完全控制何时调用甚至if绘画方法被调用 - 例如,如果重绘请求被堆叠,则可能不会全部被调用,而且JVM 有时会根据操作系统的请求启动绘画,而不管您的代码是什么。因此,出于这个原因,您应该确保您的代码不依赖于此控件。您能做的最好的事情就是在执行 repaint(...) 调用时通过传入适当的参数来限制重绘区域。

更多信息,请参阅Painting in AWT and Swing

<小时/>

请注意,您问题的这一部分让我感到困惑:

I am printing the data here in the paintComponent method for the sake of it syncing properly as I was having issues doing so within my driver main method.

您能详细说明一下吗?如果您的代码遵循 Swing 线程规则,这应该不是问题。

关于java - PaintComponent 方法运行了 3 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23073543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com