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