如何避免一遍又一遍地实现组件
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;
}
}
例如,我有 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;
}
}