【发布时间】: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