如何迭代任何JComponent的组件?

时间:2014-09-19 15:34:18

标签: java swing

这是我想要做的事情:

public static AbstractButton findButtonInContainerByText(String text, JComponent container){
    for(Component component : container.getComponents()){
        if(!(component instanceof AbstractButton))
            continue;
        AbstractButton button = (AbstractButton) component;
        if(button.getText().equals(text))
            return button;
    }
    throw new ItemNotFoundException("There is no button with the text '" + text + "' in the container " + container + ".");
}

问题是,这与JMenu无法正常配合。这是因为出于某种原因,您无法在其上调用getComponents()并获取所有组件,因此您必须致电getMenuComponents()。显然,我不想在这种方法中对各种特殊情况进行类型检查。

有没有办法正确迭代任何类型JComponent内的组件?

作为附注:您认为这个API设计决定有理由吗? JMenu#getComponents()是欺骗,因为它不是它的作用。这个问题有原因吗?

1 个答案:

答案 0 :(得分:0)

结果Container#getComponents()只返回一个直接组件的数组,而不是它们的子组件。

由于JMenu中正在发生奇怪的事情,因此它的“组件”组成部分正在进行中。它不是真正的直接组件,因此它们被视为子组件。

所以我在网上搜索了a method to recursively get all components of a Container, including sub-children

Haven尚未对其进行测试,应该可行。

编辑:不,仍然没有JMenu工作。