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