调整大小时重新绘制框架吗?

3

当我最大化或调整大小后,如何立即强制Frame重新绘制(repaint())?

我找不到该特定操作发生时调用的方法。我有一堆用Graphic对象在paint中编写的图形,它们的方向取决于实时反馈的getWidth()和getHeight(),但是当我最大化时却没有调用paint,只有当这些像素不幸地改变时才会调用。

2个回答

15

注册 ComponentListener:

final Component myComponent = makeTheFrameOrWhatever();
myComponent.addComponentListener(new ComponentAdapter() {
    @Override
    public void componentResized(ComponentEvent e)
    {
        myComponent.repaint();
    }
});

4
如果这个回答对你有所帮助,请点击“接受”答案。 - OscarRyz
3
我感觉就算全球经济复苏了,也依旧不会有人同意这个。 - Jonathan Feinberg
2
可以放心地说,经济现在已经复苏了。你的直觉很准确! - gdbj

1

你需要深入挖掘,因为当你调整框架大小时,repaint()和paint()肯定会被调用 - 这是框架使其内容被绘制的唯一方式。最有可能的是,你没有看到重绘到达框架中的特定组件,可能是因为你使用的特定布局不受窗口变大的影响。或者如果你没有布局,则必须子类化Frame并显式地调用它在子组件上的paint方法,因为没有布局管理器可以为你完成这项工作。

请注意,无论是否在调整大小时重复绘制,而不仅仅是在你松开鼠标按钮后绘制一次,可能是操作系统选项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接