【问题标题】:Need help in understanding the reason for the use of the setRootPaneCheckingEnabled() method of the JFrame class需要帮助了解使用 JFrame 类的 setRootPaneCheckingEnabled() 方法的原因
【发布时间】: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,那是那个时代,引入泛型,甜蜜

标签: java swing jframe


【解决方案1】:

在 Java 1.5 之前的版本之前,您需要编写 frame.getContentPane().add(...)

看起来很简单,但如果经常这样做,就会变得非常非常乏味。

随着 1.5 的到来,他们添加了简单地使用 frame.add(...) 并将这些呼叫转发到 contentPane 的功能。

这可能看起来不多,但它可能是 Swing 中最受质疑和要求最多的功能之一,说真的。

这也是新编码人员感到沮丧的一大原因,他们不明白JFrame 实际上是一个复合组件,并且会浪费数小时试图弄清楚为什么没有任何效果。

此外,在过去,获得一个像样的自动完成 IDE 实际上是一件困难的事情,所以,是的,长时间打字是一件非常痛苦的事情......手腕

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多