如何在Java中动态访问文本字段?

时间:2016-07-06 10:59:01

标签: java arrays loops variables

访问TextField时,我们遇到了一些问题。

我们列出了81个(是81个)textFields

private TextField textField1 = new TextField();

private TextField textField2 = new TextField();

private TextField textField3 = new TextField();

...

现在我们想从这些字段中获取文本并将它们存储在数组中。

for loop 
  data[i] = textField???.getText();

我们现在如何将更改后的号码i纳入字段名称?

感谢任何帮助或想法。

4 个答案:

答案 0 :(得分:2)

最简单的方法是将所有TextField个对象添加到ArrayList,然后遍历每个字段上调用getText()的列表。

答案 1 :(得分:0)

你可以创建一个Textfields数组,所以你可以:

private Textfield[] array_textField = new Textfield[]();

private TextField textField1 = new TextField();
array_textField[1] = textField1;

private TextField textField2 = new TextField();
array_textField[2] = textField2;

private TextField textField3 = new TextField();
array_textField[3] = textField3;
...
for loop 
data[i] = array_textField[i].getText();

但是你不再需要数据阵列了。

答案 2 :(得分:0)

如果您无法按照其他答案的建议更改此代码,则需要使用Java Reflection API,如下所示:

import java.lang.reflect.Field;
import java.lang.Class;
int i = 0;
Class  aClass = MyObject.class
Field field = aClass.getField("someField"+i);
field.getText();

答案 3 :(得分:0)

一个选项是遍历每个子组件,查看它是否为TextField,如果是,则将其值添加到数据数组中。这可能不起作用,具体取决于视图层次结构的结构。

以下是如何实现这一目标的基本想法:

    for( Component component : container.getComponents() ){
        if( component instanceof TextField ){
            // Do whatever you need 
        }
    }