检查 CardLayout 中是否存在带有名称的卡片

Shr*_*rat 3 java swing cardlayout

我有一个 CardLayout,我只在需要时添加卡片。因此,当需要显示特定卡片(由其名称标识)时,我需要一种方法来检查具有该名称的卡片是否已经存在,以便我可以相应地显示或创建它。

根据CardLayout 文档

使用 addLayoutComponent 翻转到使用指定名称添加到此布局的组件。如果不存在这样的组件,则什么也不会发生。

因此,如果我要求它显示尚未添加的卡片,则不会引发任何错误。我找不到任何可以让我检查卡片是否存在的 API。

那么,这可能吗?如果不是,人们将如何解决这个问题?有一个解决方案,我手动记住我添加了哪些卡片,但感觉 Swing 应该能够处理这个问题。

jfp*_*ret 5

CardLayout API 没有提供检查组件是否已添加给定名称的方法。

如果你真的想这样做(但我会强烈建议反对这样做),那么你可以使用反射CardLayout所使用的容器,并读取其vector字段,然后检查每个条目(类型CardLayout$Card为给定的名称)。如您所见,这看起来像是一个 hack,如果CardLayout有一天重构它可能会中断(当前的实现非常丑陋)。

最好的方法是让您直接跟踪某个Set<String>字段中所有添加的子项的名称。无论如何,这真的没什么大不了的。