Java:覆盖paintComponent以跳过一些paint =奇怪的行为

时间:2015-03-08 05:02:08

标签: java paintcomponent

我不是Java的新手,但在使用图形方面有点缺乏经验。

我正在使用JFreeChart来显示非常快速(每10毫秒)的数据条带图表。它适用于单个图表,但我有多个图表,所以我的代码无法跟上服务器。我决定覆盖JPanel中的paintComponent方法并跳过绘制一些帧。这确实提高了性能,但现在有一些奇怪的行为:我有6个图表(每个都在JPanel中),并且它们按预期更新,但六个图表中的一个闪烁到其他5个的位置,然后它们都闪烁回到他们自己,然后1图表在所有6,等等。这发生得非常快。每次运行此代码时,闪烁到所有5的图表都是随机的,所以其他人也可能会闪烁,但我看不到它。

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

如果UPDATESKIP = 1则此代码运行正常,但速度很慢。

2 个答案:

答案 0 :(得分:1)

你不应该以这种方式玩绘画方法。 JPanel的所有paintComponent()方法都是绘制面板的背景。所以我怀疑这是性能问题所在。

每次重新绘制面板时,面板的子组件都需要重新绘制,因此不重新绘制背景将产生很小的影响(相对于绘制6个图表的复杂性)。但是,如果每次都不绘制背景,则可以在面板上绘制绘画工件。

查看A Closer Look at the Painting Mechanism

上的Swing教程

如果服务器数据速度太快,那么您可能需要在重做绘画之前合并数据

答案 1 :(得分:0)

我做了更多(更好)的搜索并找到了答案: Enabling/Disabling drawing of a JFreeChartAleadam的答案是完美的,并为我做了工作。我投票给了答案,但我太新了,不能这样做。