从动态创建的JTextField获取内容

时间:2012-06-18 02:44:51

标签: java swing jtextfield

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

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

它运作良好。但是,这些JTextFields的内容可以由用户修改,之后我想从所有这些内容中调用getText()。这可能吗?我怎么能这样做?

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

2 个答案:

答案 0 :(得分: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,但如果数量未知,则列表很好。

答案 1 :(得分:2)

您无法拨打getText()的原因是您在创建JTextField时未存储对JtextField的引用。在创建collection时,您需要使用arraycollection来存储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());
}

然后你可以从所有人中调用{{1}}

{{1}}