gpt4 book ai didi

Java:重写paintComponent以跳过一些绘画=奇怪的行为

转载 作者:行者123 更新时间:2023-12-01 11:49:06 24 4
gpt4 key购买 nike

我对 Java 并不陌生,但在使用图形方面有些缺乏经验。

我正在使用 JFreeChart 来显示非常快(每 10 毫秒)出现的数据条形图。它适用于单个图表,但我有多个图表,因此我的代码无法跟上服务器。我决定重写 JPanel 中的 PaintComponent 方法并跳过绘制某些框架。这确实提高了性能,但现在出现了奇怪的行为:我有 6 个图表(每个都在 JPanel 中),它们确实按预期更新,但 6 个图表中的 1 个闪烁到其他 5 个图表的位置,然后它们全部闪烁回到自己,那么 1 个图表就包含在所有 6 个图表中,等等。这种情况发生得非常快。每次我运行此代码时,闪烁到所有 5 个的图表都是随机的,所以也许其他图表也在闪烁,但我看不到它。

@Override  
public void paintComponent(Graphics g)
{
if ((count++ % UPDATESKIP) == 0)
{
super.paintComponent(g);
}
}

如果 UPDATESKIP = 1 则此代码运行良好,但速度非常慢。

最佳答案

你不应该这样玩绘画方法。 JPanel 的 PaintComponent() 方法所做的全部工作就是绘制面板的背景。所以我怀疑这就是性能问题所在。

每次重新绘制面板时,面板的子组件都需要重新绘制,因此不重新绘制背景影响很小(相对于绘制 6 个图表的复杂性)。但是,如果您不是每次都绘制背景,那么您可能会在面板上出现绘画伪影。

查看 A Closer Look at the Painting Mechanism 上的 Swing 教程

如果服务器数据传入太快,那么也许您需要在重新绘制之前合并数据

关于Java:重写paintComponent以跳过一些绘画=奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28923274/

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