【问题标题】:Why can I not call add() on a JFrame and instead must call it on a Container?为什么我不能在 JFrame 上调用 add() 而必须在 Container 上调用它?
【发布时间】:2013-04-03 01:00:17
【问题描述】:

我正在阅读 Head First Java。在介绍 GUI 时(有本书的读者请参见第 354 页),作者写道:

frame.getContentPane().add(button);

“您不会直接将东西添加到框架中。将框架视为窗口周围的装饰,然后将内容添加到窗口窗格。”

看了Java API entry for JFrame,发现JFrame是Component的子类,继承了Component的add(Component),所以简单写就行了:

frame.add(button);

为什么书中推荐使用frame.getContentPane.add(button)?

提前致谢!

【问题讨论】:

    标签: java swing jframe


    【解决方案1】:

    可以在 JFrame 上调用 add(...),但实际上它的作用是根据 JFrame API 调用 getContentPane().add(...),也称为“语法糖”。但是要明白,这样做实际上并不是将它直接添加到 JFrame,而是实际上将它添加到 contentPane。这一点很重要,因为 JFrame 是由组件组成的,正如 JFrame/top level window Swing Tutorial 所解释的那样。

    我自己,我更喜欢文字 getContentPane().add(...),因为并非所有 JFrame 行为都会以这种方式工作,例如 setBackground(...),所以文字提醒我确切地在做什么。

    【讨论】:

    • 公平地说,我认为在比当前版本更早的 Swing 版本中,并且可能是在编写本书时当前版本,在 JFrame 上使用 add 可能是一个错误,并且 'add' 方法被加强以稍后执行通常预期的行为。
    猜你喜欢
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 2023-02-11
    • 2010-10-28
    • 2011-05-02
    • 1970-01-01
    • 2013-01-17
    相关资源
    最近更新 更多