如何使用另一个变量调用变量?

时间:2018-01-25 20:07:16

标签: java

所以我的程序中有44个按钮,对于我的一个方法,我想重新启用所有这些按钮。按钮很容易命名为btn1,btn2,btn3 ... btn44。有没有办法可以使用for循环来启用所有这些?

我很乐意做这样的事情,但我找不到必要的资源。

for(int i == 0, i < 44, i++){
  btn<i>.setEnabled(true);
}

如果没有,我将不得不通过每个按钮

btn1.setEnabled(true);
btn2.setEnabled(true);
...
btn44.setEnabled(true);

我知道这种替代方法并不是那么糟糕,但我的代码中有类似的区域,我正在寻找的技术非常有用。谢谢!

3 个答案:

答案 0 :(得分:3)

你应该制作一系列按钮:

Button[] buttons = new Button[44];
for (int i = 0; i < 44; i++) {
    // Do stuff with buttons[i]
}

你不能使用它的字符串名称表示来获取变量的值,因为它不能很好地编译;它是可能的,但不仅仅是使用Java,它需要一些奇怪的迂回方式来做它。只需使用数组。

答案 1 :(得分:2)

创建一个列表来存储所有按钮并迭代它。

...
List<Button> buttons = new ArrayList<>();
buttons.add(btn1);
buttons.add(btn2);
...
buttons.add(btn42);

然后将该列表用于群发行动:

void setStatus(boolean enabled) {
   for (Button b : buttons ) {
      b.setEnabled(enabled);
   }
}

答案 2 :(得分:0)

您可以将Buttons添加到集合中,例如List(如果您还没有这样做)。然后迭代它们会更容易。

    // this list will grow automatically when you add new elements
    List<Button> buttons = new ArrayList<>();

    // when you create a button in your code, add them to your collection/list
    buttons.add(new Button("1"));
    buttons.add(new Button("2"));
    buttons.add(new Button("3"));
    buttons.add(new Button("4"));
    buttons.add(new Button("5"));
    // etc.

    // in Java 8 you can use lambdas to update your buttons like this
    buttons.forEach(button -> button.setEnabled(true));

只需确保导入正确版本的List

请确保您使用此列表import java.util.List;而不是窗口工具包中的列表(即不是import java.awt.List;