我正在编写一个包含JButton
的程序。每次点击该按钮,新的JTextField
都会添加到JPanel
。
我的问题是,在用户创建了所有JTextFields
并用信息填充后,我需要获取每个字段的文本。在动态生成JTextFields
时,如何才能访问actionPerformed
,因为它们没有实例名称?是否有更好的方法来获取每个文本,而不知道他们的实例名称。
以下是JButton
...
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
JTextField x = new JTextField();
x.setColumns(12);
p.add(x);
validate();
}
事件的代码
{{1}}
答案 0 :(得分:9)
你说你想从每个字段中获取文本。因此,当您创建新实例x
时,为什么不保留它们的集合,例如将JTextFields
添加到ArrayList
?
或者,假设p
是JPanel
,您应该能够获得所有孩子,即您要添加的JTextFields
。尝试使用getComponents()
,就像这样......
Component[] children = p.getComponents();
for (int i=0;i<children.length;i++){
if (children[i] instanceof JTextField){
String text = ((JTextField)children[i]).getText():
}
}
答案 1 :(得分:0)
你可以通过遍历面板的组件(或任何“p”)来找到它们。如有必要,请检查每个是否为文本框。也就是说,执行p.getComponents然后遍历返回的数组。像:
Component[] components=p.getComponents();
for (Component c : components)
{
if (c instanceof JTextField)
{
String value=((JTextField)c).getText();
... do whatever ...
}
}
如果它们可以互换,那应该就是你所需要的。如果你需要区分它们,我认为最干净的事情就是创建你自己的扩展JTextField的类,它有一个名称或序列号的字段或者你需要的任何字段。