我有10個名爲label1,label2,label3,...,label10的JLabel。我想使用for
循環設置標籤中的文本。所以我想要做的就像下面這樣:如何在for循環中設置JLabel的屬性?
顯然這是行不通的。
for(int i=1; i<=10; i++){
label+i.setText("label"+i);
}
有沒有什麼辦法可以做到這一點?我真的需要這樣做,以便我不必硬編碼一切。
我有10個名爲label1,label2,label3,...,label10的JLabel。我想使用for
循環設置標籤中的文本。所以我想要做的就像下面這樣:如何在for循環中設置JLabel的屬性?
顯然這是行不通的。
for(int i=1; i<=10; i++){
label+i.setText("label"+i);
}
有沒有什麼辦法可以做到這一點?我真的需要這樣做,以便我不必硬編碼一切。
您需要將JLabel存儲在數組中。那就是:
JLabel[] labels = new JLabel[10];
// Fill that array with your JLables
for (JLabel l : labels) {
l.setText("label"+i);
}
並且擺脫那些label1,label2,label3,...,label10變量;他們沒用。
這種類型的循環是for-each循環; for (JLabel l : labels)
表示「對於陣列的每個JLabel,l
」labels
「; documentation here.(謝謝Frakcool!)
沒有辦法在編譯時不知道它的確切名稱而引用變量。唯一的選擇是使用數組(或其他集合):
JLabel label0 = new JLabel();
JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
JLabel label3 = new JLabel();
JLabel label4 = new JLabel();
JLabel label5 = new JLabel();
JLabel label6 = new JLabel();
JLabel label7 = new JLabel();
JLabel label8 = new JLabel();
JLabel label9 = new JLabel();
JLabel[] label = new JLabel[] { label0, label1, label2, label3, label4, label5, label6, label7, label8, label9 };
for (int i = 0; i < 10; i++) {
label[i].setText("label" + i);
}
爲了避免打字這麼多(以及可能的拼寫錯誤),你也許可以在迴路標籤以及:
JLabel[] label = new JLabel[10];
for (int i = 0; i < 10; i++) {
label[i] = new JLabel();
label[i].setText("label" + i);
}
你可以仍然使用label[4]
語法來引用特定標籤。注意數組從0開始索引,所以label[0]
是第一個元素,label[9]
是第10個(最後一個)元素。
這看起來不錯,但我的問題是我實際嘗試做的簡化版本。我正在嘗試'.setIcon'。那麼你的方法仍然有效嗎?另外,因爲我的'JFrame'上有10個不同的'JLabels',我需要在循環內調用'repaint()'和'reValidate()'嗎? –
'setIcon'應該像'setText'一樣工作。如果有的話,你可能想在父組件(框架或面板)上調用'repaint()'和'revalidate()'。您可以完成一次 - 完成更改所有標籤後。 –
那麼這是如何工作的?你能解釋一下':'做什麼,這個程序在做什麼? –
@LakshyaGoyal那種'for-loop'被稱爲''for-each''循環:參見[docs](http://docs.oracle.com/javase/1.5.0/docs/guide/language /foreach.html)。 ':'的意思是「開」,所以你可以閱讀上面的例子:「對於標籤上的每個JLabel l」 – Frakcool
@Frakcool謝謝! – GKFX