JLabel在另一个JLabel之上

是否可以在另一个JLabel之上添加JLabel? 谢谢。

简短的回答是肯定的,因为JLabel是一个Container ,所以它可以接受一个Component (一个JLabelComponent的子类),通过使用add方法添加到JLabel

 JLabel outsideLabel = new JLabel("Hello"); JLabel insideLabel = new JLabel("World"); outsideLabel.add(insideLabel); 

在上面的代码中, insideLabel被添加到outsideLabel

但是,在视觉上,显示带有“Hello”文本的标签,因此无法真正看到标签中包含的标签。

因此,问题在于通过在另一个标签上添加标签来实现真正想要实现的目标。


编辑:

来自评论:

好吧,我想要做的是首先,从文件中读取某个分数,然后在jlabel中显示该分数。 我想到的是将分数分成3部分,然后为三者中的每一部分使用一个标签。 然后第二,我希望能够拖动分数,所以我想我可以使用另一个jlabel,并将3’mini jlabels’放在大jlabel上。 我不知道这是否会起作用..:|

听起来应该研究如何在Java中使用布局管理器。

一个好的起点是使用 Java教程中的 布局管理器和布局管理器 的可视指南 。

听起来GridLayout可能是完成任务的一个选项。

 JPanel p = new JPanel(new GridLayout(0, 1)); p.add(new JLabel("One")); p.add(new JLabel("Two")); p.add(new JLabel("Three")); 

在上面的示例中, JPanel使用GridLayout作为布局管理器,并被告知要生成一行JLabel

原始问题的答案是肯定的,因为任何组件都可以添加到Container中。

您没有看到第二个标签的原因是因为默认情况下JLabel使用空布局管理器,第二个标签的大小为(0,0),因此没有任何内容可以绘制。 因此,您需要做的就是设置第二个标签的边界,然后离开。

如果要拖动组件,则无法使用布局管理器,因为只要调整框架等,就会调用布局管理器,并根据组件的布局管理器重新定位组件。

这是一个布局问题。 您可以使用空布局(带有硬编码位置)或使用自定义布局来实现。

您可以使用JLayeredPane并将其边框设置为No Border。

您可以使用水平或垂直间隙(hgap,vgap)布局的属性将它们添加到彼此之上
JPanel p = new JPanel(new GridLayout(2, 1,-40,0)); //the 40 is the hgap , make it the same with the label height .