2013-05-31 1 views
1

У меня есть jdialog. и я добавил 50 кнопок внутри jpanel в jdialog. Теперь я хочу, чтобы получить значения кнопок, устанавливаемая button.setText() теперь мой код выглядит следующим образомКак получить значение компонента панели в java

Component[] all_comp=mydialog.getComponents(); 
for(int i=0;i<=all_comp.length;i++) 
     { 
Container ct=all_comp[i].getParent(); 
String panel_name=ct.getName(); 
     } 

я старался изо всех сил, чтобы выяснить все возможные способы, как принимать все другие функции класс компонента. , но нет результата. Теперь я хочу получить значение кнопок (например, button.getText). как это сделать ??

+0

JButtons не являются прямыми детьми. Вы должны смотреть глубже рекурсивно. –

+0

как это сделать ?? –

ответ

1

Что вы действительно хотите сделать, это передать mydialog в метод, который найдет все содержащиеся в нем JButtons. Вот метод, где, если вы передаете в Container (JDialog является Container) и в List он пополнит List со всеми из JButtonsJDialog содержит независимо от того, как вы добавили 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(); 
    ... 
} 
+0

Не могу получить это объяснение plz или любое другое решение там? –

+0

Обновлено объяснение. – rancidfishbreath

1

Вы должны проверить текущий компонент является ли кнопка. Если это так, нажмите на кнопку и назовите ее getText():

Component[] all_comp=mydialog.getComponents(); 
for(int i=0;i<=all_comp.length;i++) { 
    if (all_comp[i] instanceof Button) { 
     String text = ((Button)all_comp[i]).getText(); 
     // this is the text. Do what you want with it.... 
    } 
} 
+0

не работает, потому что getText не является методом класса компонента, поэтому показывается ошибка –