如何避免一遍又一遍地实现组件

How to avoid implementing component over and over

例如,我有 20 个不同的 JTextField,假设我需要将文本设置为所有 "random",所以我不想这样做:

field1.setText("Random");
field2.setText("Random");
field3.setText("Random");
.
.
.
field20.setText("Random");

有没有办法避免这种情况?

在数组或 Collection 中创建 JTextField,然后遍历数组的内容。

例如:

List<JTextField> myTextFields = new ArrayList<JTextField>();

for (int i = 0; i < 20; i++) {
  myTextFields.add(new JTextField()); //Instantiate the textfields
  //Do whatever other initialization, if you can do it in a loop (like position, etc.)

  myTextFields.get(i).setText("Random"); //Set text on all of them.
}

试试这样的东西:

JTextField[] textFields = new JTextField[20];
for (int i =0; i< fields.length; i++) {
    //init here text fields
    textFields[i].setText("Random");
}

这是一个很基础的问题。你可以这样做:

Stream.of(field1,field2,...,field3).forEach(f -> f.setText("Random"));

或没有Java 8 :

JTextField fields = Arrays.asList(field1,field2,...,field3);
for (JTextField field : fields)
    field.setText("Random");

或者,如果您不需要保留对您的字段的引用:

for (int i=0 ; i<20 ; i++) {
    JTextField field = new JTextField("Random");
    // place your field in the UI
}

只是为了也涵盖到目前为止未提及的可能性:

您可以(尽管在大多数情况下您确实不应该)继承JTextField并开展您的业务,例如在构造函数中。或者你可以使用工厂方法。

(下面的示例是用一只手编写的未经测试的代码)

class MyTextField extends JTextField {
  public MyTextField() {
     setText("Random");
  }
}

/* in other file */
class MyTextFildFactory {
  public static JTextField createTextField() {
     JTextField field = new JTextField();
     field.setText("Random");
     return field;
  }
}