为什么 JComponent 是 Container 的子类?

Why is JComponent a subclass of Container?

以classjavax.swing.JComponent is a direct subclass of javax.awt.Container, which provides methods to add child components. While this makes sense for some components, like JTable or JTree, it doesn't seem to make sense for JLabel为例。据我从简单的实验中可以看出, JLabel 的 children 被忽略了。

所有 JComponent 子class 也是 Container 的子class 是否有充分的理由,或者它只是时代的遗物过分热心的 subclassing?

Why is JComponent a subclass of Container?

您可以向任何组件添加子组件。如果将组件添加到面板,您可能会得到不同的行为,但这是可以做到的。对于除 JPanel 之外的大多数组件,使用空布局。

While this makes sense for some components, like JTable or JTree,

为什么这么说。 JTable 只是一个组件。 JTable 的正常显示没有任何子组件。当您编辑单元格时,编辑器组件将添加到 table 并且 table 将管理该组件的 size/location。

it doesn't seem to make sense for JLabel, for example. As far as I could tell from simple experiments, children of a JLabel are ignored.

由于布局为空,您需要管理添加到标签的任何组件的 size/location。

或者,您可以设置 JLabel 的布局管理器。请注意,标签的实际大小不包括子项,但您可以使用布局管理器将子项放置在标签上。