2015-01-03 45 views
0

例如實現部件,我有20個不同的JTextField,讓說,我需要將文本設置爲所有的「隨機」,所以我不想做這樣的:如何避免遍地

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

有沒有辦法避免這種情況?

+2

把它們放在一個列表,並在它們之間迭代? 'for(Textfield f:fields)f.setText(「Random」);' –

+1

使用數組,集合和for循環都是基本入門Java的一部分。我不得不懷疑,在學習Java的基本基礎之前,你是否可以在購物車之前把馬車放在學習Swing或任何其他複雜的GUI上。幫你一個忙,爲Java書做一個體面的介紹,Head First書是一個很好的書,並且在嘗試更復雜的Java之前先通讀它。 –

回答

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 
} 
+0

我估計@ vivan-maya的代碼是用一個GUI構建器生成的代碼,它將字段存儲爲屬性,所以你的引用方法可能是最好的。 – h0ru5

3

在數組或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. 
} 
4

試着這麼做:

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