【发布时间】:2016-02-09 14:35:48
【问题描述】:
我正在使用不同的面板,它们是 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 内 MainPanel 内面板内元素信息时的方法:
private void printValues(java.awt.event.ActionEvent evt) {
System.out.println(""+MainPanel.getComponent(0).getAccessibleContext().getAccessibleChild(2).getAccessibleContext().getAccessibleText());
}
在这种情况下,我正在访问 MainPanel 的元素 0,即 InfoPanel,并尝试从作为 JtextField 的 Child 2 获取值,但我无法弄清楚如何获取字段内的值,我不知道' 甚至不知道是否有一种方法可以帮助解决这个问题。 您对如何执行此操作有任何建议吗?
【问题讨论】:
-
如果
MainPanel.getComponent(0).getAccessibleContext().getAccessibleChild(2).getAccessibleContext().getAccessibleText()给你JTextField,你为什么不简单地将它转换为JTextField然后我们JTextField#getText()方法? -
应该有类似 getValue() 的方法。这个方法应该返回一个“对象”对象,抓住那个对象并将其转换为字符串
-
是的,问题是我有 JTextFields 和其他不返回字符串作为值的组件,我尝试按照@STaefi 所说的那样转换整个组件,它看起来像我预期的那样工作。感谢您的展位。
-
整件事都不是一个好主意,除非你有一个非常动态的系统来创建和添加组件到随机面板。如果不是这种情况,请改变您的态度并确定用户输入在哪个面板中。然后使用所有组件的直接引用。
-
如果你想坚持使用当前的代码,你应该在你的代码中放置一些
instanceof条件来确定每个虚拟组件的类型。然后您可以转换为它的真实类型并使用适当的方法来获取值,例如:JComboBox#getSelectedValue
标签: java jpanel cardlayout