Что вы действительно хотите сделать, это передать mydialog
в метод, который найдет все содержащиеся в нем JButtons. Вот метод, где, если вы передаете в 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
контейнером. Это приведет к поиску всего дерева компонентов пользовательского интерфейса и заполнит List
всеми найденными JButtons
.
Это своего рода уродливое, чтобы создать List
и передать его в метод getButtons
таким образом, мы создадим метод обертку, который выглядит лучше
public List<JButton> getJButtons(Container container) {
List<JButton> buttons = new ArrayList<JButton>();
getJButtons(container, buttons);
return buttons;
}
Этот удобный метод просто создает ваш List
для вас, проходит это наш рекурсивный метод, а затем возвращает List
.
Теперь, когда у нас есть рекурсивный метод и метод удобства, мы можем вызвать метод удобства, чтобы получить список всех наших JButton
. После этого мы просто петлю над элементами списка и позвонить getText()
или то, что вы хотите сделать с вашими кнопками:
for (JButton button: getJButtons(mydialog)) {
String text = button.getText();
...
}
JButtons не являются прямыми детьми. Вы должны смотреть глубже рекурсивно. –
как это сделать ?? –