为什么重写像这样的顶级容器paint()
的方法如此可怕?它会导致什么样的问题?JFrame
问问题
267 次
1 回答
4
原因有很多,但很多还取决于您使用的工具包。
一般来说,paint
在顶级容器上使用会将您锁定在给定的容器中(即Frame
或Applet
)。这也会影响您重用组件的能力,因为无法将窗口添加到另一个窗口。
另一个问题是大多数框架都添加了边框(通常包含标题和框架控件的框架边框)。绘制到顶级容器不考虑这些插图,这意味着如果您在位置 0x0 处绘制,您将在框架的标题栏下进行绘制。
在 Swing 下,顶级容器不是双缓冲的。这意味着当每个元素直接渲染到单独的图形层时,重绘往往会闪烁,而不是一次绘制。
同样在 Swing 中,顶级容器由 a 控制JRootPane
,它在容器顶部放置一个内容窗格(如果您正在使用它,则为菜单栏)。这意味着您的绘画工作可能会被这些组件覆盖。
我还要补充(在摇摆中)组件绘制层/链更灵活,让您有机会在不同的层上绘制,尽管一般来说,您应该使用paintComponent
.
于 2013-06-17T23:29:20.053 回答