【发布时间】:2010-12-03 13:06:56
【问题描述】:
是否可以在另一个 JLabel 之上添加一个 JLabel?谢谢。
【问题讨论】:
-
对不起...为什么会有意义??
是否可以在另一个 JLabel 之上添加一个 JLabel?谢谢。
【问题讨论】:
简短的回答是肯定的,因为JLabel 是Container,所以它可以接受Component(JLabel 是Component 的子类)通过使用添加到JLabel add 方法:
JLabel outsideLabel = new JLabel("Hello");
JLabel insideLabel = new JLabel("World");
outsideLabel.add(insideLabel);
在上面的代码中,insideLabel被添加到outsideLabel中。
但是,在视觉上,会出现一个带有文本“Hello”的标签,因此无法真正看到标签中包含的标签。
所以,问题在于通过在另一个标签上添加一个标签来实现什么。
编辑:
来自cmets:
嗯,我想做的是首先, 从文件中读取一定的分数, 然后将该分数显示在 标签。我想到的是 将分数分成 3 部分,然后 为这三个中的每一个使用一个标签。 然后第二个,我希望能够拖动 分数,所以我想我可以使用 另一个 jlabel,并放置 3'mini jlabels' 在大 jlabel 之上。我不 知道这是否可行..:|
听起来应该研究如何在 Java 中使用布局管理器。
Using 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 使用GridLayout 作为布局管理器,并被告知要创建一行JLabels。
【讨论】:
您最初的问题的答案是肯定的,因为任何组件都可以添加到容器中。
您看不到第二个标签的原因是因为默认情况下 JLabel 使用空布局管理器,第二个标签的大小为 (0, 0),因此没有可绘制的内容。因此,您需要做的就是设置第二个标签的边界,然后离开。
如果你想拖动组件,你不能使用布局管理器,因为一旦你调整框架等的大小,布局管理器将被调用,组件将根据组件的布局管理器重新定位。
【讨论】:
这是布局问题。 您可以使用空布局(带有硬编码位置)或自定义布局来做到这一点。
【讨论】:
您可以使用JLayeredPane 并将其边框设置为无边框。
【讨论】:
您可以通过使用水平或垂直间隙(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 .
【讨论】: