Сделайте кучу JLabel 's невидимым - PullRequest
1 голос
/ 22 июля 2011

У меня есть 8 JLabels, что я изначально хочу быть невидимым.jlabels начинаются с 25 и идут 32. _(i.e jLabel25 ---> jLabel32)_ Вместо того, чтобы делать их невидимыми один за другим, я думал об использовании цикла for, который мог бы сделать их невидимыми, следуя следующим строкам кода:

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

Но я получаю очевидную ошибку, которая говорит "Не удается найти символ, метод -> jLabel (int)"

Что я должен сделать, чтобы избежать написания 8 операторов просит сделать каждого label невидимым?

Ответы [ 4 ]

6 голосов
/ 22 июля 2011

Поместите метки в общую коллекцию и выполните итерацию по ней.

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

for (JLabel label : myLabels) {
   label.setVisible(false);
} 
2 голосов
/ 22 июля 2011

Нет, я не думаю, что это возможно, вам придется каждый раз выписывать полное имя:

jLabel25.setVisible(false);

Другое возможное решение - поместить метки в массив или список, выполнить итерацию по списку / массиву и установить для него значение false.

for(JLabel label :listOfLabels)
{
  label.setVisible(false);
}
1 голос
/ 22 июля 2011

Если вы хотите убедить своих коллег, что вы сошли с ума или предпочитаете программировать на другом языке, вы можете использовать рефлексию.

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

Это работает, только если метки являются полями текущего класса, очевидно.

1 голос
/ 22 июля 2011

Разве вы не можете поместить их в список?

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