循环遍历多个文本字段

Looping through multiple text fields

我想同时在 JFrame 中获取多个文本字段的值,有什么办法解决这个问题吗?目前我正在使用这段代码来生成我想要的效果,但一定有更简单的方法,比如循环遍历它?

这是我使用的代码;它用于获取所有文本字段以获得总权重分数。

weight = new int[15];
weight[0] = Integer.parseInt(tf_weight1.getText());
weight[1] = Integer.parseInt(tf_weight2.getText());
weight[2] = Integer.parseInt(tf_weight3.getText());
weight[3] = Integer.parseInt(tf_weight4.getText());
weight[4] = Integer.parseInt(tf_weight5.getText());
weight[5] = Integer.parseInt(tf_weight6.getText());
weight[6] = Integer.parseInt(tf_weight7.getText());
weight[7] = Integer.parseInt(tf_weight8.getText());
weight[8] = Integer.parseInt(tf_weight9.getText());
weight[9] = Integer.parseInt(tf_weight10.getText());
weight[10] = Integer.parseInt(tf_weight11.getText());
weight[11] = Integer.parseInt(tf_weight12.getText());
weight[12] = Integer.parseInt(tf_weight13.getText());
weight[13] = Integer.parseInt(tf_weight14.getText());
weight[14] = Integer.parseInt(tf_weight15.getText());

我正在考虑做一些类似的事情;

   String s = "tf_weight";
   int inte = 1;
    for(int i = 0; i<14; i++)
    {
         s = s +  inte + ".getText()";
       for(int j = 0; j<1; j++)
        {
            inte++;
            criteria[i] = s.getText().replaceAll(" ", "~");
       }
    }

如有任何帮助,我们将不胜感激。

创建一个包含 tf_weight 个对象的数组,然后遍历 数组并调用 getText 方法。

喜欢:

JTextField textFields[] = {tf_weight1, ..., tf_weight2};
for (int i = 0; i < textFields.length; i++) {
  weight[i] = Integer.parseInt(textFields[i].getText());
}

那是行不通的,因为包含 "tf_weight4.getText()" 的字符串不是方法调用。即使要在对象上反射调用方法,也首先需要对象。

您可以通过多种方式执行此操作:

  • 保留一个文本字段列表,然后迭代它以调用 getText()。这是最简单高效的方法。
  • 获取包含文本字段的父组件,遍历其子组件,过滤掉文本字段,然后对它们调用 getText()。使用这种方法,您将需要一种方法来将您想要的文本字段与组件中可能也存在的其他文本字段区分开来。

因此,当您第一次构建视图时,您需要存储文本字段:

List<JTextField> weightFields = new ArrayList<>();
weightFields.add(tf_weight1);
weightFields.add(tf_weight2);
// and so on

然后,当您需要调用 getText() 时

List<Integer> weights = new ArrayList<>();
for (JTextField tf: weightFields) {
    weights.add(Integer.parseInt(tf.getText()));
}

非常感谢!也许这可以帮助某人:

    int num = 0;
    int aux = 0;
    int T   = 0;        

    JTextField txt[] = {jTextField1, jTextField2, jTextField3, jTextField4, jTextField5, jTextField6, jTextField7};
    for(int i = 1; i <= txt.length; i++){
        num = Integer.parseInt(txt[i-1].getText());

        T = aux + num;
        aux = T;
        this.jLabel2.setText(Integer.toString(T));
    }

}