使用嵌套的for循环显示GUI标签

时间:2019-04-15 17:16:13

标签: java user-interface for-loop nested nested-loops

我在ArrayList名称中存储了10个名称。

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

我想使用GLabel对象在GUI窗口中显示这10个名称。目前,我有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循环将创建相距40px的GLabel对象,内部for循环将填充每个{ {1}}对象,其字符串名称来自GLabel名称。

但是,尽管外部ArrayList循环有效(成功创建10个for对象,相距40像素),内部循环似乎覆盖显示每个名称的每个标签,而不是单一名称。

incorrect output in GUI window

我认为发生此问题是因为内循环只运行一次,而不是10次。但是,我不确定如何确保第一个循环运行10次,第二个循环仅运行一次。

1 个答案:

答案 0 :(得分:0)

跳过两个循环并遍历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;
}