7

我试图找到一个外行的定义,addNotify()但我无法使用谷歌得到任何答案。

据我所知,addNotify()在课堂上压倒一切时,我应该先打电话super.addNotify(); ,然后再做其他事情。

我的问题是,会addNotify()自动运行吗?它的目的是什么,当我覆盖它时会发生什么,此外,我为什么要覆盖这个方法?

谢谢。

4

3 回答 3

7

我的问题是,addNotify() 会自动运行吗?

是的。确切的位置和时间取决于 AWT 实现的内部结构。

它的目的是什么

javadoc中所述。它是非常低级的东西,是连接 AWT 世界和本地窗口世界的“胶水”的一部分。(我故意说得很高级和含糊不清。如果您想了解细节,请下载并阅读 OpenJDK 源代码。)

当我覆盖它时会发生什么

你可能会破坏 AWT :-)

此外,我为什么要覆盖这个方法?

我想不出这样做的充分理由……除非您试图将 AWT 移植到不同的操作系统或不同的本机窗口系统。

于 2013-03-20T09:58:30.763 回答
1

方法addNotify() / removeNotify() 是 AWT 提供的唯一钩子,我们可以在其中正确地销毁和重新创建 OpenGL 上下文,因为底层的原生小部件正在被销毁。
addNotify()低级组件使用它与操作系统上的底层对等点进行交互,以便真正发生某些事情,而不仅仅是屏幕上的漂亮图片。
最好避免使用这种方法。

于 2013-03-20T09:45:49.590 回答
1

Component#addNotify()java.awt.Component类中的方法。API 中说明此方法的目的:

通过将其连接到本机屏幕资源,使该组件可显示。此方法由工具包内部调用,不应由程序直接调用。

于 2013-03-20T09:44:55.907 回答