【问题标题】:Stack JPanels and JLabels堆栈 JPanel 和 JLabels
【发布时间】:2018-09-20 21:38:00
【问题描述】:

我要感谢您到目前为止的帮助,现在我遇到了另一个问题。我可以很好地制作背景面板并放置带有标签的面板。我想将一个带有标签的面板堆叠在另一个带有标签的面板上。或将标签堆叠在另一个之上。所以它会是背景,然后是 JPanel,标签在背景之上,另一个 JPanel 的标签在第一个带标签的 JPanel 之上。

我现在正在运行的代码的开头如下:

    // SWITCH 1
    switch1 = new JPanel();
    switch1.setLocation(24,348);
    switch1.setSize(55,83);
    switch1.setOpaque(false);
    background.add(switch1);

    sw1 = new JLabel();
    sw1.setIcon(SW1);
    sw1.setLocation(0,0);
    switch1.add(sw1);
    pack();

我想在此之上添加一个带有 JLabel 的较小 JPanel。那可能吗?我尝试了几种方法,但它不起作用我尝试的一种方法是:

    // SWITCH 2
    switch2 = new JPanel();
    switch2.setLocation(24,348); 
    switch2.setSize(45,73); 
    switch2.setOpaque(false);
    switch1.add(switch2);

    sw2 = new JLabel();
    sw2.setIcon(SW2);
    sw2.setLocation(0,0);
    switch2.add(sw2);
    pack();

那行不通。提前感谢您帮助我解决此问题。

【问题讨论】:

  • setSize ... setLocation ... 您了解组件在 Swing 中的布局方式吗?也许你应该停下来看看Laying Out Components Within a Container
  • I want to thank you for the help so far - 那么不要忘记在您获得帮助时“接受”答案(请参阅:stackoverflow.com/questions/52395907/jbutton-release-action),方法是单击复选标记,以便每个人都知道问题已经解决。跨度>
  • 这几乎听起来最好在单个JPanel 中使用自定义绘画来完成(没有JLabel 组件,只需在需要的位置和顺序绘制图像)。

标签: java swing jpanel jlabel


【解决方案1】:

或将标签堆叠在另一个之上

听起来你想要OverlayLayout

您将面板的布局管理器设置为使用OverlayLayout。然后将标签添加到面板。

标签的绘制顺序与您将它们添加到面板的顺序相反。

查看:Preventing Overlay Layout from shifting background image label 获取演示如何使用 OverlayLayout 的示例。

【讨论】:

  • 你说了一些我以前没有尝试过的事情,只是做了。 “标签的绘制顺序与您将它们添加到面板的顺序相反。”一旦我这样做了,我的原始代码就起作用了!谢谢!
  • Once I did that my original code worked! - 我仍然不确定你是否理解使用布局管理器的概念。当您在 2D 布局中有组件时,您无需担心这个问题。也不需要使用 setSize() 或 setLocation() 方法,因为这是布局管理器的工作。组件的顺序仅在使用 OverlayLayout 时才相关。因为组件在 Z 轴上分层。
  • 我没有使用布局管理器,因为我的布局设置为空:setLayout(null);
  • 您发布的代码中没有任何地方使用空布局。当您发布的代码不完整时,您希望我们如何提供合理的答案?在任何情况下,您都不应该使用空布局。 Swing 旨在与布局管理器一起使用。根据您发布的简单示例,绝对没有理由使用空布局。
猜你喜欢
  • 2014-10-28
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 2014-06-23
  • 2013-12-07
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多