java - 如何使 JPanel 在移动时显示在另一个 JPanel 上?

标签 java swing user-interface

我创建了一个纸牌游戏,允许用户将纸牌(即 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/

相关文章:

java - 将 wsdl 转换为 JAR 文件时出现错误

java - 使用 GridBagLayout 修剪 JTable 下面的列空间

java - 当前线程没有可用的实际事务的 EntityManager - 无法可靠地处理 'remove' 调用

java - 在 Java 中搜索 JList

java - 如何使 JCombobox 看起来像 JTextField

python - Pyside:检测 QWidget 上的单击和双击

java - 我的答案在第一次输入后总是返回错误并且不会跟踪分数?

java - 我无法修复 GUI 的小问题。 JTextFields

javascript - Thymeleaf 在 Google Analytics 代码上抛出错误

HBase 扫描过滤器的 Java 正则表达式不起作用