【发布时间】:2019-02-22 05:48:22
【问题描述】:
这更像是一个理论问题。我正在阅读 JFrame 类的文档,它有一个名为 setRootPaneCheckingEnabled() 的方法,其目的似乎是控制 add() 和 setLayout() 对 JFrame 内容窗格的调用的转发。如果我们将 true 传递给这个方法,那么对 add() 和 setLayout() 的调用将被转发,如果我们传递 false,这些调用会直接在 JFrame 上操作。
我不知道为什么有人希望 add() 和 setLayout() 调用直接在 JFrame 而不是它的内容窗格上运行。有人可以告诉我这些原因吗?
【问题讨论】:
-
啊,因为您在 1.6 之前从未使用过 Java 编码。在“早期”时代,恐龙在地球上行走,我们用凿子在石碑上编码,你需要写
frame.getContentPane().add(...)。看起来很简单,但如果经常这样做,就会变得非常非常乏味。随着 1.6 的到来,他们添加了简单地使用frame.add(...)并将这些呼叫转发到contentPane的功能。这也是新程序员的一大挫败感,他们不明白JFrame实际上是一个复合组件,并且会浪费数小时试图弄清楚为什么没有任何效果 -
另外,在过去,在没有完整的情况下获得一个像样的 IDE 实际上是一件困难的事情,所以,是的,长时间打字是一件非常痛苦的事情......手腕
-
非常感谢@MadProgrammer 让我知道这一点!您介意添加此评论作为答案,以便我接受吗?
-
顺便说一句@MadProgrammer,我刚刚根据您的评论挖掘了一些文档。事实证明,他们开始将对
add()和setLayout()的调用转发到Java 1.5 中JFrame 的内容窗格。在此之前,您必须手动将所有内容添加到内容窗格中。这是link -
啊,回到过去的 1.5,那是那个时代,引入泛型,甜蜜