例如實現部件,我有20個不同的JTextField
,讓說,我需要將文本設置爲所有的「隨機」,所以我不想做這樣的:如何避免遍地
field1.setText("Random");
field2.setText("Random");
field3.setText("Random");
.
.
.
field20.setText("Random");
有沒有辦法避免這種情況?
例如實現部件,我有20個不同的JTextField
,讓說,我需要將文本設置爲所有的「隨機」,所以我不想做這樣的:如何避免遍地
field1.setText("Random");
field2.setText("Random");
field3.setText("Random");
.
.
.
field20.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
}
我估計@ vivan-maya的代碼是用一個GUI構建器生成的代碼,它將字段存儲爲屬性,所以你的引用方法可能是最好的。 – h0ru5
在數組或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");
}
只是爲了還覆蓋到目前爲止沒有提到的可能性:
你可以(雖然你真的不應該在大多數案例)繼承自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;
}
}
把它們放在一個列表,並在它們之間迭代? 'for(Textfield f:fields)f.setText(「Random」);' –
使用數組,集合和for循環都是基本入門Java的一部分。我不得不懷疑,在學習Java的基本基礎之前,你是否可以在購物車之前把馬車放在學習Swing或任何其他複雜的GUI上。幫你一個忙,爲Java書做一個體面的介紹,Head First書是一個很好的書,並且在嘗試更復雜的Java之前先通讀它。 –