如何避免反复实现组件

时间:2015-01-03 17:10:22

标签: java swing

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

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

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

4 个答案:

答案 0 :(得分:7)

这是一个非常基本的问题。你可以这样做:

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
}

答案 1 :(得分:4)

尝试类似:

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

答案 2 :(得分:3)

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

例如:

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.
}

答案 3 :(得分:2)

还要涵盖到目前为止未提及的可能性:

你可以(虽然你真的不应该在大多数情况下)从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;
  }
}