0

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

2 回答 2

9

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

或者,假设它p是 a 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():
    }
}
于 2012-05-07T13:19:21.163 回答
0

您可以通过遍历面板的组件(或任何“p”)来找到它们。如有必要,检查每个是否都是文本框。也就是说,执行 p.getComponents 然后遍历返回的数组。喜欢:

Component[] components=p.getComponents();
for (Component c : components)
{
  if (c instanceof JTextField)
  {
    String value=((JTextField)c).getText();
    ... do whatever ...
  }
}

如果它们可以互换,那应该就是您所需要的。如果您需要区分它们,我认为最干净的做法是创建您自己的扩展 JTextField 的类,并且该类具有用于名称或序列号或您需要的任何内容的字段。

于 2012-05-07T13:30:06.080 回答