我有10个JLabel,名为label1,label2,label3,...,label10。我想使用for
循环在标签中设置文本。所以我想要做的就是以下几点:
显然这不起作用。
for(int i=1; i<=10; i++){
label+i.setText("label"+i);
}
有没有办法真正做到这一点?我真的需要这样做,这样我就不需要对所有内容进行硬编码。
答案 0 :(得分:4)
您需要将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)
表示“对于数组l
的每个JLabel labels
”; documentation here. (感谢Frakcool!)
答案 1 :(得分:4)
在编译时如果不知道其确切名称,就无法引用变量。唯一的选择是使用数组(或其他一些集合):
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个(最后一个)元素。