2

我在 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);
}
4

2 回答 2

7

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

  1. 可能还有另一个容器,例如 JPanel。
  2. 可能还有另一个组件,如 JLabel、JButton、....

使用此方法:

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());
于 2013-07-21T21:56:11.653 回答
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("");
  }
}
于 2013-07-21T21:58:13.557 回答