我创建了一个纸牌游戏,允许用户将纸牌(即 JPanel)相互移动。但是,我注意到,如果我尝试将一张卡移动到另一张卡的确切位置(即在其顶部),该卡将不会始终显示在该卡的顶部。
例如,假设我们有 5 张卡片,它们是按顺序构建的。
如果将card1移动到card2的位置,则card1将出现在card2的上方。但是,如果我尝试将卡 5 移动到卡 3 的位置,那么卡 5 将出现在卡 3 的下方。
我怎样才能使我移动的最后一张牌成为最上面的牌?
最佳答案
However, I noticed that if I attempt to move a card to another cards exact location (ie on top of it), that card will not always be displayed on top of that card.
这听起来与组件的 Z 排序有关。基本上,Swing 的默认行为是首先绘制添加到面板的最后一个组件。
因此,当您在面板上添加卡片时,需要更改 Z-Order。您可能正在使用如下代码:
panel.add( card );
简单的解决方案是使用:
panel.add(0, card);
或者,当您单击要使用的卡片时处理 mousePressed() 事件时:
Component child = event.getComponent();
Component parent = child.getParent();
parent.setComponentZOrder(child, 0);
您可能还想查看Overlap Layout它进一步解释了 Z 顺序,并提供了一个布局管理器,可以让您堆叠卡片。
关于java - 如何使 JPanel 在移动时显示在另一个 JPanel 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33180247/