我有一个带有字符串列表的列表框。根据选择的字符串,我需要在下面显示一组文本框。我的方法是为每组文本框创建一个JPanel,然后将所有这些JPanels放入卡片布局中。当用户选择特殊字符串时,我将翻转卡片布局以显示带有文本框的适当面板。
但是,我不想事先创建所有面板,因为用户可能永远不会选择一些列表值。因此,仅当用户选择列表值时,我要检查卡布局中是否添加了此卡(或面板),如果没有,则创建新面板(带有文本框)并将其添加到卡布局中。
但是我在CardLayout类中没有看到任何API,它可以让我测试是否将特定面板添加到了Card Layout中。只有
void addLayoutComponent(String name,Component comp)
并且这不会返回任何东西来测试是否成功将面板添加到名片中。
我怎样才能做到这一点?
最佳答案
Hashtable
布局管理器使用一个HashMap
(甚至不是CardLayout
),但这仅在内部使用,而不在外部公开。
以下是两种可能的解决方案:
您可以保留一个单独的HashMap<String, JPanel>
来说明已创建的面板。
您可以保留JPanel
参考列表,并在添加到接收容器之前检查并实例化null
。