Исключение: добавление окна в контейнер.Как это решить? - PullRequest
3 голосов
/ 07 декабря 2011

У меня есть JDialog класс с именем Preferences.Этот класс создает конструктор, такой как:

class Preferences extends javax.swing.JDialog {
          Preferences(java.awt.Frame parent,modal)  {
                      super(parent,modal);
                      //......
          }
}

В моей программе я хочу, чтобы этот диалог настроек открывался, когда я нажимал кнопку в форме JFrame.После того, как я зарегистрировал слушатель действия на кнопке, я написал код внутри как:

Frame fr = new Frame();
Preferences p = new Preferences(fr,false);
fr.add(p);
fr.setVisible(true);

Когда я запускаю этот код, я получаю следующее исключение (когда я нажимаю кнопку):

Exception in thread "AWT-EventQueue-0" 
    java.lang.IllegalArgumentException: adding a window to a container

Что это значит и как я могу это решить?

Ответы [ 3 ]

13 голосов
/ 07 декабря 2011

Что это значит ..

Один контейнер верхнего уровня (диалог) нельзя добавить в другой (фрейм).

.. и как я могу это решить?

Просто вызовите setVisible(true) в диалоге Preferences, а не добавляйте его.

6 голосов
/ 07 декабря 2011

Вы не добавляете JDialog в JFrame, это не имеет никакого смысла, поскольку метод add(...) предназначен для добавления отображаемых компонентов в контейнера, а не на контейнер. Вы отображаете JDialog из ActionListener JButton JFrame. Вы также не должны смешивать компоненты AWT (Frame) и компоненты Swing без веской причины.

Ваш вопрос говорит о том, что вы получили бы большую пользу, пройдя учебники по Swing.

4 голосов
/ 07 декабря 2011

JDialog и JFrame - это контейнер верхнего уровня . Я предлагаю вам использовать JFrame, JInternalFrame и JDesktopPane.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...