这是我想要做的事情:
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()
是欺骗,因为它不是它的作用。这个问题有原因吗?
答案 0 :(得分:0)
结果Container#getComponents()
只返回一个直接组件的数组,而不是它们的子组件。
由于JMenu
中正在发生奇怪的事情,因此它的“组件”组成部分正在进行中。它不是真正的直接组件,因此它们被视为子组件。
所以我在网上搜索了a method to recursively get all components of a Container
, including sub-children。
Haven尚未对其进行测试,应该可行。
编辑:不,仍然没有JMenu
工作。