【发布时间】:2014-02-03 08:29:07
【问题描述】:
我在 Swing 上阅读 Core Java Volume 1。我很难理解这一段:
首先,作者说
组件可以放置在面板等容器中。容器 可以自己放在其他容器中,所以类容器 扩展组件。图 9.8 显示了继承层次结构 组件,
注意:不幸的是,继承层次结构有些不干净 在两个方面。首先,JFrame等顶级窗口是 容器和组件的子类,但它们不能是 放在其他容器内。此外,JComponent 是一个 Container 的子类,而不是 Component。因此可以添加其他 组件到 JButton 中(但是,这些组件不会 显示)。
在我看来,他在照片前后的陈述似乎是相反的。 我也无法清楚地理解作者在这里想说什么。 如果有人可以用一个例子或其他东西详细说明,那将很有用 谢谢
【问题讨论】:
-
这可能只关注一个元素,但本质上,只是因为
JFrame扩展自Frame,而Window扩展自Container(扩展自Component),您可能会假设您可以将一个JFrame添加到另一个。但你不能。这是组件中的一个限制,以防止您这样做。他强调了对象层次结构告诉您的内容与 API 可以做什么之间的差异......所以是的,这是矛盾的,因为它必须如此。 -
@MadProgrammer:抱歉,我不清楚你的意思
-
仅仅因为
JFrame从Container延伸(间接),你不能做new JFrame().add(new JFrame())。 API 不允许您这样做。但它允许您添加从Container或Component扩展的其他对象,例如JPanel,您可以执行new JFrame().add(new JPanel())... -
@MadProgrammer: 但我可以有 new JPanel().add(new JPanel()) 和 JComponent 一样,对吧?
-
是的。这就是重点。您可以将任何类型的
Container或Component添加到Container,除非Window是或从Window扩展的任何内容,尽管Window从Container扩展...
标签: java swing components jbutton containers