访问动态生成的GUI JTextField对象

时间:2012-05-07 13:15:26

标签: java dynamic jpanel instance jtextfield

我正在编写一个包含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}}

2 个答案:

答案 0 :(得分:9)

你说你想从每个字段中获取文本。因此,当您创建新实例x时,为什么不保留它们的集合,例如将JTextFields添加到ArrayList

或者,假设pJPanel,您应该能够获得所有孩子,即您要添加的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的类,它有一个名称或序列号的字段或者你需要的任何字段。