如何在java中使用for循环清除文本字段

时间:2013-07-21 21:49:03

标签: java swing jtextfield clear

我在Java中创建了如下文本字段。当我点击“清除”按钮时,我想立即清除所有这些文本字段。

private javax.swing.JTextField num1;
private javax.swing.JTextField num2;
private javax.swing.JTextField num3;
private javax.swing.JTextField num4;
private javax.swing.JTextField num5;
private javax.swing.JTextField num6;
private javax.swing.JTextField num7;

现在我想知道如何使用for循环清除所有文本字段,如:

for(int i=1;1<7;i++){
   num[i].settext(null);
}

2 个答案:

答案 0 :(得分:7)

您可以通过container.getComponents()方法轻松获取容器内的组件,并考虑一些重要的事情:

  1. 可能还有另一个像JPanel这样的容器。
  2. 可能有另外一个组件,如JLabel,JButton,....
  3. 使用此方法:

    public void clearTextFields (Container container){
    
      for(Component c : container.getComponents()){
       if(c instanceof JTextField){
         JTextField f = (JTextField) c;
         f.setText("");
     } 
      else if (c instanceof Container)
         clearTextFields((Container)c);
    }
    }
    

    调用这样的方法:

    clearTextFields(this.getContentPane());
    

答案 1 :(得分:7)

这样的代码:

private javax.swing.JTextField num1;
private javax.swing.JTextField num2;
private javax.swing.JTextField num3;
private javax.swing.JTextField num4;
private javax.swing.JTextField num5;
private javax.swing.JTextField num6;
private javax.swing.JTextField num7;

是否需要使用集合或数组来排列和简化代码。因此,如果您使用JTextField数组或更好的ArrayList<JTextField>。然后清除所有这些都是微不足道的。

public static final int FIELD_LIST_COUNT = 7;

private List<JTextField> fieldList = new ArrayList<JTextField>();

// in constructor
for (int i = 0; i < FIELD_LIST_COUNT; i++) {
  JTextField field = new JTextField();
  fieldList.add(field);
  fieldHolderJPanel.add(field); // some JPanel that holds the text fields
}

// clear method
public void clearFields() {
  for (JTextField field : fieldList) {
    field.setText("");
  }
}