让一堆JLabel的'看不见

时间:2011-07-22 14:48:28

标签: java swing visibility jlabel

我有8 JLabels我最初想要隐身。 jlabels从25开始,然后转到32. _(i.e jLabel25 ---> jLabel32)_我没有让它们一个一个地隐形,而是考虑使用一个for循环,可以通过遵循以下代码行使它们不可见:

for( int i = 25 ; i <= 32 ; i++ ) {
        jLabel(i).setVisible(false);
}

但是我得到一个明显的错误,上面写着“找不到符号,方法 - &gt; jLabel(int)”

我应该怎么做才能避免写出8条陈述要求让每个label不可见?

4 个答案:

答案 0 :(得分:6)

将标签放入一个公共集合中,然后迭代它。

Collection<JLabel> myLabels = new ArrayList<JLabel>();
myLabels.add(jLabel25); // .. and so on

for (JLabel label : myLabels) {
   label.setVisible(false);
} 

答案 1 :(得分:2)

不,我认为不可能,你必须每次都写出全名:

jLabel25.setVisible(false);

另一种可能的解决方案是将标签放在数组或列表中,并遍历列表/数组并将其设置为false。

for(JLabel label :listOfLabels)
{
  label.setVisible(false);
}

答案 2 :(得分:1)

你不能把它们放在一个清单中吗?

List<JLabel> labels = Arrays.asList(jLabel25, jLabel26, /*rest of 'em here*/);
for(JLabel label : labels) {
    label.setVisible(false);
}

答案 3 :(得分:1)

如果你想说服你的同事你生气或者宁愿用另一种语言编程,你可以使用反思。

for(Field labelField : getClass().getFields()) {
    String name = label.getName();
    if(name.startsWith("jLabel") && name.length == 8 && indexBetween(name.substring(7, 9), 25, 32)) {
        JLabel label = (JLabel) labelField.get(this);
        label.setVisible(false);
    }
}

这仅适用于标签是当前类的字段的情况。