Использование вложенного цикла for для отображения меток GUI - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть 10 имен, хранящихся в ArrayList именах.

ArrayList<String> names = new ArrayList<String>(10);

name.add(name);            // the value of this is "Zac"
names.add("undefined1");
names.add("undefined2");
names.add("undefined3");
names.add("undefined4");
names.add("undefined5");
names.add("undefined6");
names.add("undefined7");
names.add("undefined8");
names.add("undefined9");

Я хочу отобразить эти 10 имен в окне графического интерфейса, используя объект GLabel. В настоящее время у меня есть 10 жестко закодированных GLabel объектов, которые принимают каждую отдельную строку имени, но я чувствую, что это очень многократно.

GLabel showName1 = new GLabel(name, (getWidth() / 2.0) - 100, (getHeight() / 2.0) - 160); // this last integer (160) is the position
showName1.move(-showName1.getWidth() / 2, -showName1.getHeight());
showName1.setColor(Color.WHITE);
add(showName1);

GLabel showName2 = new GLabel("undefined", (getWidth() / 2.0) - 100, (getHeight() / 2.0) - 120); // this last integer (120) is the position 
showName2.move(-showName2.getWidth() / 2, -showName2.getHeight());
showName2.setColor(Color.WHITE);
add(showName2);

...

Я хотел бы использовать циклическую конструкцию для отображения каждой из них. Единственная разница между каждым жестко закодированным GLabel заключается в отображаемом имени и позиции . Позиция должна быть уменьшена на 40 для каждой метки .

int counter = 10;
for (int position = 160; counter > 0; position -= 40) {
    for (String name: names) {
        GLabel showName = new GLabel(name, (getWidth() / 2.0) - 100, (getHeight() / 2.0) - position);
        showName.move(-showName.getWidth() / 2, -showName.getHeight());
        showName.setColor(Color.WHITE);
        add(showName);
    }
    counter--;
}

Я настроил этот вложенный цикл for, исходя из того, что внешний цикл for будет создавать объекты GLabel с разницей в 40 пикселей, а внутренний цикл for будет заполнять каждый объект GLabel с использованием имени строки из ArrayList имен.

Однако, хотя внешний цикл for работает (объекты размером 10 GLabel успешно созданы на расстоянии 40px), кажется, что внутренний перезаписывает каждую метку, отображая каждое имя , а не одно имя, как предполагалось.

incorrect output in GUI window

Я думаю, что эта проблема возникает, потому что внутренний цикл должен выполняться только один раз, а не 10 . Однако я не уверен, как обеспечить, чтобы первый цикл выполнялся 10 раз, а второй - только один раз.

1 Ответ

0 голосов
/ 15 апреля 2019

Пропустить оба цикла и перебрать массив names

int position = 160;
for (String label : names) {
    GLabel showName = new GLabel(label, (getWidth() / 2.0) - 100, (getHeight() / 2.0) - position);
    showName.move(-showName.getWidth() / 2, -showName.getHeight());
    showName.setColor(Color.WHITE);
    add(showName);
    position -= 40;
}
...