是否有可能获得Java CardLayout中的顶级卡片? 我试着循环遍历每个组件来检查isVisible()的可见性,但似乎它们都是“可见的”。如何获得Java CardLayout中的顶级卡片
编辑:通过“顶牌”我的意思是当前在“顶部”,正在显示,而不是第一张或最后一张牌。另外,我不知道,但如果它帮助我在寻找一个JPanel(或其子类)
编辑:代码片断
for (Component component : getComponents()) {
if (component instanceof JPanel && component.isVisible()) {
currentPanel = (JPanel) component;
System.out.println(currentPanel.getClass().getName());
}
}
上面的代码总是打印出的每个组件类的名字,无论他们是否是可见的卡片。
编辑:我将此作为学校作业的一部分。我不想在这里获得免费赠品,这项任务并不是围绕这种布局。它似乎是用于在面板之间切换的最方便的布局。我的老师已经指定项目中不会有第三方代码。我以前看过camickr链接的实现,但我无法使用它。我可以松散地实现它的类似功能,也许可以在文档中提供参考,但我不能简单地下载并使用它。
编辑:我想获得顶牌的原因是因为我有一个带有“添加”按钮的工具栏。我只想通过查看当前正在查看的面板知道要添加哪个按钮,而不是为我的两个可能的事情中的每一个都添加一个按钮。如果还有其他更适合的方法,请告诉我。
编辑:谢谢大家的帮助。我找出了问题所在。我想这是我的错,因为我没有提供足够的细节。我的两张卡是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;
}
@RD,代码片段来自尝试使用CardLayout的JPanel中的getCurrentPanel()方法。我为其他原因扩展了JPanel,所以我可以访问它。 – alexcoco 2010-12-10 22:09:55
好吧,没有看到你所有的代码,我不能告诉你出了什么问题,但我可以告诉你,我的TestFrame代码一次只能正确找到一张可见卡。 – 2010-12-10 22:11:55
@alexcoco,编辑将相关代码放入getCurrentCard()方法中。 – 2010-12-10 22:18:38