【问题标题】:Display JLabel partially on top of another JLabel将 JLabel 部分显示在另一个 JLabel 之上
【发布时间】:2013-03-17 02:11:12
【问题描述】:

我正在尝试在我的 GUI 中显示卡片,并且我想重叠卡片以节省空间。但是,我似乎无法让它工作。我目前正在使用 MigLayout,但感觉更像是 JLabel 问题而不是其他问题。

要从高层次上描述它,请考虑在现实生活中玩纸牌游戏。当你正常拿着牌时,你只需要看到牌的一部分,所以牌的大部分被另一张牌重叠,依此类推,直到最后一张牌完全显示出来,因为它上面什么都没有。我想以一种只显示下面的部分卡片的方式重叠,然后完全显示顶部的卡片。

当前的问题是,当我将 JLabel 添加到 JPanel 时,它会将最新的标签放在已经存在的标签后面。我希望它出现在已经存在的东西之前。我似乎找不到任何方法可以让我设置哪个标签在前面。

我想做这样的事情:

将 card1 放入单元格 0 0 将 card2 放在单元格 0 0 中,并带有转置的 y 位置 两张卡重叠的任何区域顶部都有card2

只需添加它即可将其置于后面,这表明组件的显示具有先到先得的优先级。我宁愿有一个后到先得的优先权。就像我说的那样,我没有运气尝试找到一种方法来实现这些。

如果有任何不清楚的地方,请告诉我。提前致谢。

【问题讨论】:

  • 这可能需要您建立自己的布局管理器。您可以使用 GridBagLayout 进行一些工作来雕刻它,但我建议您需要对任何现有的布局管理器进行本地化,以便能够很好地支持它
  • 好吧,我不会再回到 GridBagLayout,我对它的体验很糟糕,我发现它是最可怕的布局管理器之一。我有很多问题,只需在不同的布局管理器中重做即可解决。如果可能,我想继续使用现有的布局管理器。
  • I'd like to keep using the existing layout manager if possible。不,这是不可能的。 JDK 附带的布局管理器以 2D 布局组件,没有重叠。 JDK 中有一个名为 OverlayLayout 的布局,但我从来没有能够让它以任何有意义的方式工作。
  • @camickr - 我成功地让它与现有的布局管理器一起工作。我所要做的就是设置组件的 z 组件。根据我在其他地方重叠的经验,z 组件相当普遍,如果解决方案确实需要使用新的布局管理器,我会感到非常惊讶。
  • @MichaelYousef, I successfully got it working with the existing layout manager. - 什么布局管理器?你是说 MigLayout 吗?那不是标准的布局管理器。那是第三方布局管理器。我从来没有使用过它。我没有意识到它支持这种类型的布局。所以,是的,它确实需要使用新的布局管理器,因为基本 JDK 不支持它。此外,因为您是手动设置 ZOrder,所以实际上是您在进行布局,而不是布局管理器。 OverlapLayout 为您完成所有工作。

标签: java swing user-interface jlabel miglayout


【解决方案1】:

看起来 JPanel 继承自 Container,它有一个方法 setComponentZOrder(),听起来就像你需要的那样。

setCompoentZOrder() documentation

【讨论】:

  • 谢谢,这正是我所需要的。它工作起来有点笨拙,但我现在可以工作了,所以一切都很好。
【解决方案2】:

查看Overlap Layout,它详细解释了 ZOrder 的工作原理,甚至可以为您提供布局管理器来帮助您进行纸牌游戏。

【讨论】:

  • +1 表示尽管您自己的 Wordpress 有一个无耻的插件,但仍能准确定位。
  • 以前不知道,这样的作品存在如此美妙的布局:-)
猜你喜欢
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多