是否可以在另一个 JLabel 之上添加一个 JLabel?谢谢。
5 回答
简短的回答是肯定的,因为 aJLabel
是 a Container
,所以它可以接受 a Component
(aJLabel
是 的子类)通过使用以下方法Component
添加到:JLabel
add
JLabel outsideLabel = new JLabel("Hello");
JLabel insideLabel = new JLabel("World");
outsideLabel.add(insideLabel);
在上面的代码中,insideLabel
被添加到outsideLabel
.
然而,在视觉上,一个带有文本“Hello”的标签出现了,所以人们无法真正看到标签中包含的标签。
因此,问题归结为一个人真正想要通过在另一个标签上添加一个标签来完成什么。
编辑:
从评论:
好吧,我想做的是首先从文件中读取某个分数,然后在 jlabel 中显示该分数。我想到的是把分数分成三部分,然后为三部分中的每一个使用一个标签。其次,我希望能够拖动分数,所以我想我可以使用另一个 jlabel,并将 3'mini jlabels' 放在大 jlabel 上。我不知道这是否可行..:|
听起来应该研究如何在 Java 中使用布局管理器。
一个很好的起点是使用 Layout Managers和A Visual Guide to Layout Managers,两者都来自The Java Tutorials。
听起来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
使用 aGridLayout
作为布局管理器,并被告知创建一行JLabel
s。
您最初的问题的答案是肯定的,因为任何组件都可以添加到容器中。
您看不到第二个标签的原因是因为默认情况下 JLabel 使用空布局管理器,第二个标签的大小为 (0, 0),因此没有可绘制的内容。因此,您需要做的就是设置第二个标签的边界,然后您就可以离开了。
如果要拖动组件,则不能使用布局管理器,因为一旦调整框架等的大小,就会调用布局管理器,并且将根据组件的布局管理器重新定位组件。
这是布局问题。您可以使用空布局(带有硬编码位置)或自定义布局来做到这一点。
您可以使用 aJLayeredPane
并将其边框设置为无边框。
您可以通过使用水平或垂直间隙 (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 .