为什么在顶级容器中覆盖油漆如此糟糕?

时间:2013-06-17 22:32:57

标签: java swing debugging

为什么覆盖像paint()这样JFrame的{​​{1}}方法真是太可怕了?它会引起什么样的问题?

1 个答案:

答案 0 :(得分:4)

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

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

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

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

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

我还要添加(在摇摆下)组件绘制层/链更灵活,允许您有机会在不同的层上绘制,尽管一般来说,您应该使用paintComponent