Java 从动态创建的JTextFields获取内容

Java 从动态创建的JTextFields获取内容,java,swing,jtextfield,Java,Swing,Jtextfield,我正在用Swing学习Java,在使用JTextField时遇到了一些问题。在我的程序中,我想动态添加几个JTextFields和一些文本: while( (ln = bufFile.readLine()) != null ) { // inIdPanel is JPanel inIdPanel.add(new JTextField(ln)); } 而且效果很好。但是,用户可以修改这些JTextFields的内容,稍后我想从所有这些字段调用getText()。这可能吗?我该怎么

我正在用Swing学习Java,在使用
JTextField
时遇到了一些问题。在我的程序中,我想动态添加几个
JTextFields
和一些文本:

while( (ln = bufFile.readLine()) != null ) {
    // inIdPanel is JPanel
    inIdPanel.add(new JTextField(ln));
}
而且效果很好。但是,用户可以修改这些
JTextFields
的内容,稍后我想从所有这些字段调用
getText()
。这可能吗?我该怎么做


我看到了这个问题:但这还不足以解决我的问题(我认为在我的案例中使用数组不是一个好主意,但可能我错了)。

要获得一个简单的解决方案,只需添加一个
ArrayList textFieldList
并添加到您发布的代码中:

while((ln = bufFile.readLine()) != null) {
    textFieldList.add(new JTextField(ln));
    inIdPanel.add(textFieldList.get(textFieldList.size()-1));
}
然后,当您想要访问文本字段时,您只需遍历它们,例如

for (JTextField jtf : textFieldList) {
    /* Operate on jtf, call methods, etc */
}

如果对可以添加的文本字段数量有定义的限制,则可以用数组替换
ArrayList
,但如果数量未知,则列表很好。

要简单解决此问题,只需添加
ArrayList textFieldList
并添加到您发布的代码中:

while((ln = bufFile.readLine()) != null) {
    textFieldList.add(new JTextField(ln));
    inIdPanel.add(textFieldList.get(textFieldList.size()-1));
}
然后,当您想要访问文本字段时,您只需遍历它们,例如

for (JTextField jtf : textFieldList) {
    /* Operate on jtf, call methods, etc */
}

如果对可以添加的文本字段数量有定义的限制,则可以用数组替换
ArrayList
,但如果数量未知,则该列表很好。

无法调用
getText()
的原因是,您在创建
JTextField
时没有存储对该字段的引用。创建时需要使用or来存储
JtextField
s,以便以后可以对其调用该方法。一个
集合
将比一个
数组
更容易,因为您不知道要读入多少行,所以希望它能够增长

List<JTextField> fields = new ArrayList<JTTextField>();
while( (ln = bufFile.readLine()) != null ) {
    JTextField field = new JTextField(ln);
    inIdPanel.add(field);
    fields.add(field);
}

无法调用
getText()
的原因是,在创建
JTextField
时,没有存储对它的引用。创建时需要使用or来存储
JtextField
s,以便以后可以对其调用该方法。一个
集合
将比一个
数组
更容易,因为您不知道要读入多少行,所以希望它能够增长

List<JTextField> fields = new ArrayList<JTTextField>();
while( (ln = bufFile.readLine()) != null ) {
    JTextField field = new JTextField(ln);
    inIdPanel.add(field);
    fields.add(field);
}