如何使用 .hasMoreElements() 遍历 JButtonGroup?

How to loop over JButtonGroup using .hasMoreElements()?

正如标题所暗示的那样,这是一个非常简单的问题,尽管出于某种原因我似乎无法让它工作。这是我得到的:

while(styleButtonGroup.getElements().hasMoreElements()){
        mainPanel.add(styleButtonGroup.getElements().nextElement());
    }

但是,问题是我的程序似乎并没有在按钮之间循环 - 相反,它只是试图一遍又一遍地添加第一个按钮。例如,如果我 运行 以下,我应该在 .nextElement() 的第 3 次调用时得到一个空指针异常(因为这个按钮组只有 2 个按钮......),虽然没有错误而且我继续获取输出 "True 2"...

while(styleButtonGroup.getElements().hasMoreElements()){
        mainPanel.add(styleButtonGroup.getElements().nextElement());
        mainPanel.add(styleButtonGroup.getElements().nextElement());
        mainPanel.add(styleButtonGroup.getElements().nextElement());
        mainPanel.add(styleButtonGroup.getElements().nextElement());
        mainPanel.add(styleButtonGroup.getElements().nextElement());
        System.out.println(styleButtonGroup.getElements().hasMoreElements() + " " + styleButtonGroup.getButtonCount());
    }

您每次调用 styleButtonGroup.getElements() 时都会创建一个新的 Enumeration,并且每个新的枚举都从组的开头开始。

你可能想要这样的东西:

Enumeration<AbstractButton> buttons = styleButtonGroup.getElements();
while (buttons.hasMoreElements()) {
    mainPanel.add(buttons.nextElement());
}

您需要使用 Enumerator 的一个实例,而不是不断创建一个新实例

Enumeration<Component> elements = styleButtonGroup.getElements();
while(elements.hasMoreElements()){
        mainPanel.add(elements.nextElement());
        mainPanel.add(elements.nextElement());
        mainPanel.add(elements.nextElement());
        mainPanel.add(elements.nextElement());
        mainPanel.add(elements.nextElement());
        System.out.println(elements.hasMoreElements() + " " + styleButtonGroup.getButtonCount());
    }