开发者

Make a bunch of JLabel 's' invisible

I have 8 JLabels that i initially want to be invisible . The jlabels start from 25 and go 32. _(i.e jLabel25 ---> jLabel32)_ Instead of making them invisible one by one i was thinking of using a for loop that could开发者_如何学Python make them invisible by following these lines of code :

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

But i get an obvious error that says "Cannot find symbol , method--> jLabel(int) "

What should i do to avoid writing 8 statements asking to make each label invisible ?


Put the labels into a common collection, and iterate through that.

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

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


No, I do not think that is possible, you will have to write the full name out each time:

jLabel25.setVisible(false);

Another possible solution is put the labels in a array or list, and iterate through the list/array and set it to false.

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


Can't you put them in a List?

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


If you want to convince your co-workers you're mad or would rather be programming in another language, you could use reflection.

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);
    }
}

This only works if the labels are fields on the current class, obviously.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜