2

为什么重写像这样的顶级容器paint()的方法如此可怕?它会导致什么样的问题?JFrame

4

1 回答 1

4

原因有很多,但很多还取决于您使用的工具包。

一般来说,paint在顶级容器上使用会将您锁定在给定的容器中(即FrameApplet)。这也会影响您重用组件的能力,因为无法将窗口添加到另一个窗口。

另一个问题是大多数框架都添加了边框(通常包含标题和框架控件的框架边框)。绘制到顶级容器不考虑这些插图,这意味着如果您在位置 0x0 处绘制,您将在框架的标题栏下进行绘制。

在 Swing 下,顶级容器不是双缓冲的。这意味着当每个元素直接渲染到单独的图形层时,重绘往往会闪烁,而不是一次绘制。

同样在 Swing 中,顶级容器由 a 控制JRootPane,它在容器顶部放置一个内容窗格(如果您正在使用它,则为菜单栏)。这意味着您的绘画工作可能会被这些组件覆盖。

我还要补充(在摇摆中)组件绘制层/链更灵活,让您有机会在不同的层上绘制,尽管一般来说,您应该使用paintComponent.

于 2013-06-17T23:29:20.053 回答