2016-11-24 3 views
0

Я строю JPanel, и он предоставляется JInternalFrame. Теперь я хочу, чтобы, если кто-то нажимает кнопку X JInternalFrame, он скрыт, а не закрыт. Проблема в том, что я должен реализовать эту функцию в JPanel, и у меня нет доступа к JInternalFrame.Скрыть JInternalFrame от JPanel

Возможно ли это?

Я знаю, что из JInternalFrame это можно реализовать с помощью setDefaultCloseOperation(HIDE_ON_CLOSE);, но я не знаю, как это сделать с JPanel. Конечно, я искал в SO, но я не нашел ничего подходящего для моего дела.

Другой вопрос, только для понимания: что происходит, когда вы нажимаете на кнопку X? Вызывается функция dispose()? Я новичок в Java Swing и интересуюсь, как это работает.

+0

* Возможно ли это * Нет, это не так?. Да, метод dispose вызывается, когда пользователь нажимает на «X». –

ответ

1

, но я не знаю, как это сделать из JPanel

Вы можете использовать SwingUtilities класс, чтобы найти родительский контейнер.

Что-то вроде:

JInternalFrame frame = (JInternalFrame)SwingUtilities.ancestorOfClass(JInternalFrame.class, thePanel); 
+0

Когда я инициализирую Panel, у него нет родительского контейнера, поэтому я получаю исключение NullPointerException. Я не могу использовать его после, но спасибо – Ludy

+0

@Ludy, это правильно. Вы не должны выполнять этот код при создании компонентов. Вышеупомянутый код выполняется в 'ActionListener', который вы добавляете к кнопке, которую вы добавляете на свою панель. – camickr

+0

теперь я нашел способ использования вашей линии. Для меня работает AncestorListener. Кстати, я должен опубликовать свое решение? – Ludy