【问题标题】:How to call a variable using another variable?如何使用另一个变量调用一个变量?
【发布时间】:2018-01-26 04:45:27
【问题描述】:

所以我的程序中有 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);

我知道这种替代方法还不错,但我的代码中有类似的区域,我正在寻找的技术将非常有用。谢谢!

【问题讨论】:

  • 为什么不将它们全部存储到数组或列表中?
  • 你有List或类似的所有按钮吗?如果没有,您如何跟踪它们?
  • 而不是单独保存每个按钮,您应该在Collection 中管理它们,例如ListArrayList。如果buttons 是上述列表,那么您可以直接致电for (Button b : buttons) { button.setEnabled(true); }
  • @ochi 我认为 OP 有 44 单个变量。很好,他现在可以使用数组和列表来消除混乱。
  • @Zabuza 你做了一个很大的假设

标签: java


【解决方案1】:

你应该制作一个按钮数组:

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

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

【讨论】:

  • 或一些集合,如List(例如ArrayList)。请注意,增强的 for 循环在这里可能更方便:for (Button b : buttons) { ... } 但我建议根据问题级别显示两者。
  • @Zabuza 也可以,不过我只建议在按钮数量未知并且在运行时可以更改的情况下这样做。
  • @HyperNeutrino List 非常适合这种情况,ArrayList 在下面使用一个数组,如果将来需要,使用 List 将提供更大的灵活性。数组对于处理大量项目仍然很有价值,例如文件的字节或来自网络的流; 44 个元素绝不应该代表效率问题。
  • 如果不是数组中的所有元素都被初始化,这种方法就会有问题——或者如果需要超过44个按钮,或者......
  • @ochi - 超过 44 个按钮没有问题,只需使用那个数字即可;问题是如果按钮的数量会在runtime 发生变化,那么使用集合会好得多。在任何情况下,如果您正在使用数组,请不要使用幻数44 - 将其定义为private static final int BUTTON_COUNT = 44;,以便在一个地方进行更改如果数字发生变化。我个人会选择@OscarRyz ArrayList - 更灵活,buttons.get(17) 具有良好的随机访问性能
【解决方案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);
   }
}

【讨论】:

    【解决方案3】:

    您可以将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;

    【讨论】:

      猜你喜欢
      • 2020-01-10
      • 1970-01-01
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多