Java 从CardLayout中的元素获取信息
我正在使用不同的面板,这些面板是CardLayOut的一部分,每个面板内部都有一些文本字段、下拉列表和复选框元素,我想做的是使用布局外部的按钮从每个元素获取信息。 我已经了解了如何获取每个元素的属性,以下是我对Cardlayout的定义:Java 从CardLayout中的元素获取信息,java,jpanel,cardlayout,Java,Jpanel,Cardlayout,我正在使用不同的面板,这些面板是CardLayOut的一部分,每个面板内部都有一些文本字段、下拉列表和复选框元素,我想做的是使用布局外部的按钮从每个元素获取信息。 我已经了解了如何获取每个元素的属性,以下是我对Cardlayout的定义: layCard= new CardLayout(); MainPanel.setLayout(layCard); MainPanel.add("Panel1",InfoPanel); MainPanel.add("Panel2"
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()
,等等)。IfMainPanel.getComponent(0.getAccessibleContext().getAccessibleChild(2.getAccessibleContext().getAccessibleContext()
提供了JTextField
,为什么不直接将其转换为JTextField
,然后使用JTextField#getText()
方法呢?应该有类似于getValue()的方法。这个方法应该返回一个“Object”-Object,抓取该对象并将其转换为StringYes,问题是我有JTextFields和其他组件,它们不将字符串作为值返回,我尝试按照@statefi所说的转换整个组件,它看起来像我所期望的那样工作。多亏了你的布斯。除非你有一个非常动态的系统来创建和添加随机面板的组件,否则整个事情都不是一个好主意。如果情况并非如此,请改变态度,并确定用户输入在哪个面板中。然后使用所有组件的直接引用。如果要坚持使用当前代码,应在代码中放置一些instanceof
条件,以确定每个虚拟组件的类型。然后您可以转换为它的实际类型,并使用适当的方法来获取值,例如:JComboBox#getSelectedValue
谢谢,这可能是一个解决方案,我尝试了它并成功了,问题是我已经有很多代码,对于每个面板,实现这个解决方案将更加困难。