1

我正在使用 Swing 学习 Java,但在使用JTextField. 在我的程序中,我想动态添加JTextFields一些文本:

while( (ln = bufFile.readLine()) != null ) {
    // inIdPanel is JPanel
    inIdPanel.add(new JTextField(ln));
}

而且效果很好。但是,这些内容JTextFields可以由用户修改,以后我想getText()从他们所有人那里调用。这可能吗?我怎样才能做到这一点?

我看到了这个问题:Java Swing: JButton created new JTextField(s)但这还不足以解决我的问题(我认为在我的情况下使用数组不是一个好主意,但也许我错了)。

4

2 回答 2

2

对于一个简单的解决方案,只需添加一个ArrayList<JTextField> 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数组,但如果该数量未知,则列表很好。

于 2012-06-18T02:50:43.787 回答
2

您无法调用的原因getText()是您没有存储对JTextField创建时的引用。您将需要在创建它们时使用数组集合来存储JtextFields,以便稍后在它们上调用该方法。Acollection会比 an 更容易,array因为你不知道要读多少行,所以你希望它能够增长。

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

然后你可以.getText()从他们所有人中调用

for(JTextField field: fields){
    System.out.println(field.getText());
}
于 2012-06-18T02:51:54.527 回答