班级javax.swing.JComponent是javax.awt.Container的直接子类,提供methods to add child components。虽然这对某些组件很有意义,例如JTable或JTree,但对于JLabel来说似乎没有意义。据我从简单的实验中可以看出,JLabel
的孩子被忽略了。
是否有充分的理由认为所有JComponent
子类也是Container
的子类,或者它只是过度热化子类化的遗留物?
答案 0 :(得分:1)
为什么JComponent是Container的子类?
您可以将子组件添加到任何组件。您可能会获得与向面板添加组件时不同的行为,但可以完成。对于除JPanel之外的大多数组件,使用空布局。
虽然这对某些组件有意义,例如JTable或JTree,
为什么这么说呢。 JTable只是一个组件。 JTable的正常显示没有任何子组件。编辑单元格时,编辑器组件将添加到表格中,表格将管理组件的大小/位置。
例如,它似乎对JLabel没有意义。据我从简单的实验中可以看出,JLabel的孩子被忽略了。
由于布局为null,您需要管理添加到标签的任何组件的大小/位置。
或者,您可以设置JLabel的布局管理器。请注意,标签的实际大小不包括子项,但您可以使用布局管理器将子项放在标签上。