2015-09-09 5 views
1

Я создал приложение Java Swing, в котором он состоит из jDesktoppane, внутри которого я загружаю/вызываю некоторые внутренние рамки из кнопок переключения в основном фрейме (JFrame). И я использовал группу jButton для всех кнопок переключения, так что только один кадр будет при нажатии кнопки.Как получить доступ к компонентам в JFrame из внутреннего фрейма

Поскольку я использовал кнопку переключения, хотя я располагаю JInternalFrame, соответствующая кнопка переключения будет находиться в нажатом режиме (Selected). Я пробовал много способов и не мог изменить состояние кнопки переключения из выбранного в UnSelected.

Сначала я создал метод внутри моего основного JFrame.

public void buttongroup_off(){   
    buttonGroup 1.setSelected(null,false);    
} 

Затем я создал объект внутри кнопки выхода из JInternalFrame и через которые я назвал метод buttongroup_off().

private void jButton 7 ActionPerformed(java.awt.event.ActionEvent evt) {   
    Main m1= new Main();       
    m1.buttongroup_off();      
    this.dispose();      
} 

но это не сработает !!, Может ли кто-нибудь помочь мне в этом? im kind для программирования.

ответ

1
private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {   
    Main m1= new Main();       
    m1.buttongroup_off();      
    this.dispose();      
} 

В этом коде вы создаете новый JFrame Main (который невидим после создания) и отключить его ButtonGroup. Это не то, что вы хотите. Вы должны вызвать метод buttongroup_off, используя ссылку на существующий основной экземпляр. Вы можете передать ссылку через пользовательский конструктор для настраиваемого класса, который расширяет JInternalFrame, или вы можете добавить статический метод в класс Main, который вернет ссылку на основной экземпляр. Как это:

private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {   
    Main m1 = Main.getInstance();       
    m1.buttongroup_off();      
    this.dispose();      
} 

Вы также можете посмотреть на этот вопрос зависит ответы: managing parent frame from child frame on java swing

1

Вы можете получить JFrame с помощью кода, как:

Component source = (Component)event.getSource(); 
Main frame = (Main)SwingUtilities.windowForComponent(source); 

Теперь, когда у вас есть ссылка на кадр вы можете вызывать любой метод из вашего настраиваемого класса фрейма.

+0

Im получает ошибку в 1-й строке вашего кода, * событие * - это место. – TRomesh

+0

Приведенный выше код добавлен к вам ActionListener. Поэтому используйте имя переменной, которое вы используете для ActionEvent. – camickr

+0

Я тебя не понял. whats имя переменной события? это actionPerformed ?? – TRomesh