鼠标监听器调用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重复,但当我在那里发帖时,它已被删除。
答案 0 :(得分:2)
为什么要在Swing组件JFrame中添加一个AWT组件Canvas?你应该只使用Swing组件。你也知道你的MyCanvas的大小,以及你如何将它添加到JFrame,因为你没有显示这段代码。
考虑