【问题标题】:Looping through multiple text fields循环遍历多个文本字段
【发布时间】:2015-04-21 11:43:44
【问题描述】:

我正在尝试一次在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(" ", "~");
       }
    }

任何帮助将不胜感激。

【问题讨论】:

  • 获取所有这些文本字段所在的框架,然后以与显示相同的方式遍历所有组件
  • Java 变量不能这样工作。为什么不将 JTextFields 放在 ArrayList&lt; JTextField&gt; 之类的集合中,或者使用 JTable 更好?

标签: java loops jframe textfield


【解决方案1】:

那行不通,因为包含"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()));
}

【讨论】:

    【解决方案2】:

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

        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));
        }
    
    } 
    

    【讨论】:

      【解决方案3】:

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

      喜欢:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-15
        • 1970-01-01
        • 1970-01-01
        • 2019-07-21
        • 2019-01-03
        • 2018-01-15
        • 1970-01-01
        相关资源
        最近更新 更多