你真正想要做的是將mydialog
傳入一個方法,該方法將查找其中包含的所有JButton。這裏是哪裏,如果你在一個Container
(JDialog
是Container
)和List
通過它將填補List
所有的JButtons
的JDialog
包含不管你如何添加JButtons
的方法。
private void getJButtons(Container container, List<JButton> buttons) {
if (container instanceof JButton) {
buttons.add((JButton) container);
} else {
for (Component component: container.getComponents()) {
if (component instanceof Container) {
getJButtons((Container) component, buttons);
}
}
}
}
基本上這個方法看起來,看看如果傳入的Container
是JButton
。如果是,則將其添加到List
。如果不是,則它查看Container
的所有孩子,並遞歸地調用getJButtons
與容器。這將搜索整個UI組件樹,並填入List
及其找到的所有JButtons
。
這是一種醜陋必須創建一個List
並把它傳遞到getButtons
方法,所以我們將創建一個看起來包裝方法更好
public List<JButton> getJButtons(Container container) {
List<JButton> buttons = new ArrayList<JButton>();
getJButtons(container, buttons);
return buttons;
}
這個便利方法簡單地爲您創建List
,通過它以我們的遞歸方法,然後返回List
。
既然我們有遞歸方法和便捷方法,我們可以調用便捷方法來獲取我們所有的JButton
s的列表。我們剛剛循環遍歷列表中的項目,並調用getText()
或任何其他後你想與你的按鈕做:
for (JButton button: getJButtons(mydialog)) {
String text = button.getText();
...
}
JButtons不是直接的孩子。你需要遞歸地看更深。 –
該怎麼做? –