Java JFrame / Canvas不重绘

时间:2011-09-30 19:29:34

标签: java canvas jframe repaint

鼠标监听器调用repaint(),我可以看到它确实经过绘图部分,因为我看到globalcounter在System.out.println()的输出中递增。然而,在屏幕上,我没有看到任何变化,直到我最小化窗口并再次最大化,调整大小,或将其移出可见屏幕区域并重新进入。显然,我希望在没有我干预的情况下进行更新。

class GUI extends javax.swing.JFrame {
int globalcounter=0;
  class MyCanvas extends Canvas {

  @Override
  public void paint(Graphics g) {
    globalcounter++;
    g.drawString(globalcounter,100,100);
    System.out.println(globalcounter);
    }

  }
}

(最初我是从一个不断更新的文件(网络摄像头)加载图像并在画布上绘画。当我将其部分拖出可见的屏幕区域并重新进入时,那个已经“在外面”的部分被刷新了,其余的没有。)

revalidate()而不是repaint()没有改变任何内容。

我知道这篇文章与Java repaint not working correctly重复,但当我在那里发帖时,它已被删除。

1 个答案:

答案 0 :(得分:2)

为什么要在Swing组件JFrame中添加一个AWT组件Canvas?你应该只使用Swing组件。你也知道你的MyCanvas的大小,以及你如何将它添加到JFrame,因为你没有显示这段代码。

考虑

  • 使用JPanel而不是Canvas对象,
  • 使用paintComponent方法绘制
  • 如果您仍然被卡住,请向我们展示sscce
  • 而且,如果您所做的只是绘制文本,请使用JLabel而不是绘制paint / paintComponent,并使用setText(...)方法更改其文本。