是否有可能在 Java 的 CardLayout 中获得顶级卡片?我尝试遍历每个组件以使用 isVisible() 检查可见性,但似乎它们都是“可见的”。
编辑:“顶牌”是指当前位于“顶部”的正在显示的牌,而不是第一张或最后一张牌。另外,我不知道它是否有帮助,但我正在寻找一个 JPanel (或其子类)
编辑:代码片段
for (Component component : getComponents()) {
if (component instanceof JPanel && component.isVisible()) {
currentPanel = (JPanel) component;
System.out.println(currentPanel.getClass().getName());
}
}
上面的代码总是打印出每个组件类的名称,不管它们是否是可见卡。
编辑:我将其用作学校作业的一部分。我不是想在这里获得免费赠品,任务并不围绕这个布局。它似乎是在面板之间切换的最方便的布局。我的老师已经指定项目中没有第三方代码。我之前已经从 camickr 的链接中看到了实现,但我不能使用它。我可以松散地实现类似的功能,也许在文档中给出参考,但我不能简单地下载和使用它。
编辑:我试图获得顶部卡片的原因是因为我有一个带有“添加”按钮的工具栏。我不想为我的两个可能的事情中的每一个都设置一个添加按钮,而是希望它通过查看当前正在查看的面板来知道要添加哪个。如果有其他更合适的方法可以做到这一点,请告诉我。
编辑:感谢大家的帮助。我弄清楚了问题所在。我想这是我的错,因为我没有提供足够的细节。我的两张卡片是JScrollPane
s,我还需要查看其中的内容,以确定其中一个面板是否是我所看到的。我没有检查isVisible()
滚动窗格本身,我一直在查看它始终可见的主张,我需要验证滚动窗格的可见性。
public JPanel getCurrentPanel() {
JPanel currentPanel = null;
for (Component component : getComponents()) {
if (component.isVisible()) {
if (component instanceof JPanel)
currentPanel = (JPanel) component;
else if (component instanceof JScrollPane)
currentPanel = (JPanel) ((JScrollPane) component).getViewport().getComponent(0);
}
}
return currentPanel;
}