我正在使用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)但这还不足以解决我的问题(我认为在我的情况下使用数组并不是一个好主意,但也许我错了)。
答案 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
时,您需要使用array或collection来存储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}}