我有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