Java 从CardLayout中的元素获取信息

Java 从CardLayout中的元素获取信息,java,jpanel,cardlayout,Java,Jpanel,Cardlayout,我正在使用不同的面板,这些面板是CardLayOut的一部分,每个面板内部都有一些文本字段、下拉列表和复选框元素,我想做的是使用布局外部的按钮从每个元素获取信息。 我已经了解了如何获取每个元素的属性,以下是我对Cardlayout的定义: layCard= new CardLayout(); MainPanel.setLayout(layCard); MainPanel.add("Panel1",InfoPanel); MainPanel.add("Panel2"

我正在使用不同的面板,这些面板是CardLayOut的一部分,每个面板内部都有一些文本字段、下拉列表和复选框元素,我想做的是使用布局外部的按钮从每个元素获取信息。 我已经了解了如何获取每个元素的属性,以下是我对Cardlayout的定义:

    layCard= new CardLayout();
    MainPanel.setLayout(layCard);
    MainPanel.add("Panel1",InfoPanel);
    MainPanel.add("Panel2",selection);
    MainPanel.add("Panel3",questions);
    MainPanel.add("Panel4",summary);
以下是我在尝试获取CardLayout内主面板内面板内的元素信息时的方法:

private void printValues(java.awt.event.ActionEvent evt) {                                     


    System.out.println(""+MainPanel.getComponent(0).getAccessibleContext().getAccessibleChild(2).getAccessibleContext().getAccessibleText());

}
在本例中,我正在访问主面板的元素0,即InfoPanel,并尝试从子2获取值,该子2是一个JtextField,但我无法确定如何获取字段内的值,我甚至不知道是否有方法可以帮助实现这一点。
你有什么建议吗?

组件添加到
数组
列表中,然后从相对索引(
Array[index]
List.get(index)
)调用它们

如果您无法直接访问索引所需的号码,您可以使用
for
循环在
数组
列表
中循环


这样,您就可以知道
组件的对象类型,并且可以安全地强制转换或直接访问正确的方法(
getText()
,等等)。

If
MainPanel.getComponent(0.getAccessibleContext().getAccessibleChild(2.getAccessibleContext().getAccessibleContext()
提供了
JTextField
,为什么不直接将其转换为
JTextField
,然后使用
JTextField#getText()
方法呢?应该有类似于getValue()的方法。这个方法应该返回一个“Object”-Object,抓取该对象并将其转换为StringYes,问题是我有JTextFields和其他组件,它们不将字符串作为值返回,我尝试按照@statefi所说的转换整个组件,它看起来像我所期望的那样工作。多亏了你的布斯。除非你有一个非常动态的系统来创建和添加随机面板的组件,否则整个事情都不是一个好主意。如果情况并非如此,请改变态度,并确定用户输入在哪个面板中。然后使用所有组件的直接引用。如果要坚持使用当前代码,应在代码中放置一些
instanceof
条件,以确定每个虚拟组件的类型。然后您可以转换为它的实际类型,并使用适当的方法来获取值,例如:
JComboBox#getSelectedValue
谢谢,这可能是一个解决方案,我尝试了它并成功了,问题是我已经有很多代码,对于每个面板,实现这个解决方案将更加困难。