【问题标题】:JLabel on top of another JLabelJLabel 在另一个 JLabel 之上
【发布时间】:2010-12-03 13:06:56
【问题描述】:

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

【问题讨论】:

  • 对不起...为什么会有意义??

标签: java swing jlabel


【解决方案1】:

简短的回答是肯定的,因为JLabelContainer,所以它可以接受ComponentJLabelComponent 的子类)通过使用添加到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 ManagersA 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 中显示该分数。我想到的是把分数分成三部分,然后为三部分中的每一个使用一个标签。其次,我希望能够拖动分数,所以我想我可以使用另一个 jlabel,并将 3'mini jlabels' 放在大 jlabel 上。我不知道这是否可行..:|
【解决方案2】:

您最初的问题的答案是肯定的,因为任何组件都可以添加到容器中。

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

如果你想拖动组件,你不能使用布局管理器,因为一旦你调整框架等的大小,布局管理器将被调用,组件将根据组件的布局管理器重新定位。

【讨论】:

  • 哦。但是是否可以在另一个标签上放置一个标签,并且能够将两个标签作为一个标签拖动? :|
  • 如果将鼠标监听器添加到父标签中,那么所有子标签在移动时也会被拖动。
  • 哦..但是朋友说不可能..说我应该使用面板。哇。现在我迷路了。 :|
  • 这是可能的,我已经告诉过你怎么做。它的 4 行代码,2 行创建标签,第 1 行设置子标签的边界,第 4 行将子标签添加到父标签。测试它大约需要 5 分钟。如果它不起作用,请尝试并发布您的 SSCCE。如果您不知道 SSCCE 是什么,请在网上搜索。
【解决方案3】:

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

【讨论】:

  • 我一直在尝试这样做,但它对我不起作用。 :c 也许我做错了什么。我会再尝试。谢谢欧瑞!
  • 您可以使用 list() 函数获取当前容器层次结构的良好转储,应该可以帮助您调试问题。
  • 太棒了!谢谢!是不是又遇到问题了,可以再发这里吗?
  • 如果是同一个问题,当然可以。如果您当前的问题已解决,请接受其中一个答案,如果您还有其他问题,请创建一个新问题。
【解决方案4】:

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

【讨论】:

  • 很抱歉,如果您使用设计师,那是一种简单的方法!就像 Netbeans 中的那个。
【解决方案5】:

您可以通过使用水平或垂直间隙(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 .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多