2016-05-07 3 views
0

Добрый день!Закрыть окна без закрытия Приложение

У меня есть этот код:

private static class ClickListener implements ActionListener { 

    public ClickListener() { 

    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     JFrame frame = new JFrame(); 
     JLabel label = new JLabel("Opção Indisponivel"); 
     JPanel panel = new JPanel(); 
     frame.add(label, BorderLayout.CENTER); 
     frame.setSize(300, 400); 
     JButton button = new JButton("Voltar"); 
     button.addActionListener(new CloseWindowListener()); 
     panel.add(button); 
     frame.add(panel, BorderLayout.SOUTH); 
     frame.setVisible(true); 
    } 
} 

private static class CloseWindowListener implements ActionListener { 

    public CloseWindowListener() { 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     setVisible(false); 
    } 
} 

То, что я хочу сделать, когда я нажимаю на кнопку «Волтар» (который находится в другом окне, а не на «основной» один, как вы можете видеть) он закрывает окна, но не приложение. Строка setVisible дает мне ошибку о том, что на нее нельзя ссылаться статическим контекстом, который я понимаю, потому что мне нужна ссылка на фрейм. Как я могу это решить?

EDIT: Изменен JFrame для JDialog, но все еще нет успеха. Оба окна завершены.

Спасибо заранее, Диого Santos

+1

В вашем графическом интерфейсе должно быть только одно основное окно приложения - один JFrame. Любые другие вспомогательные или зависимые окна должны быть JDialogs, а не JFrames, и закрытие их не может закрыть приложение. –

+0

Также обратите внимание на [Использование нескольких JFrames, Good/Bad Practice?] (Http://stackoverflow.com/questions/9554636) –

+1

@HovercraftFullOfEels Этот вопрос был отмечен как дубликат: http: // stackoverflow.com/questions/4268749/how-to-close-a-jframe-without-closing-the-main-program. Однако я не думаю, что это дубликат, поэтому я снова открыл вопрос. Этот вопрос о 'Строке setVisible дает мне ошибку о том, что на него нельзя ссылаться статическим контекстом, который я понимаю, потому что мне нужна ссылка на фрейм. Как это решить? ' – camickr

ответ

1

SetVisible линия дает мне ошибку о том, что он не может ссылаться на статическом контексте, который я понимаю, потому что мне нужна ссылка кадра. Как я могу это решить?

Вы можете получить доступ к компоненту, который сгенерировал событие. Затем вы можете найти окно, к которому принадлежит компонент. Это даст вам общий код, чтобы скрыть любое окно:

//setVisible(false); 
JButton button = (JButton)e.getSource(); 
Window window = SwingUtilities.windowForComponent(button); 
window.setVisible(false); 

Вы также можете проверить Closing an Application. К вашей кнопке можно добавить ExitAction. Теперь, когда вы нажимаете кнопку, это будет похоже на нажатие кнопки «x» (закрыть) окна. Это любая операция закрытия по умолчанию, которую будет вызывать ваш указатель для окна.

Смежные вопросы