Exceção: adicionar uma janela a um container como resolvê-lo?

Eu tenho uma class JDialog chamada Preferences.java . Esta class cria um construtor como:

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

No meu programa eu quero que esta checkbox de diálogo de preferências para abrir como eu clicar em um botão de um formulário Jframe.Depois que eu registrei o ouvinte de ação no botão, eu escrevi o código dentro como:

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

Quando eu executo este código eu recebo a seguinte exceção (quando clico no botão) :

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

O que isso significa e como posso resolver isso?

O que isto significa..

Um contêiner de nível superior (diálogo) não pode ser adicionado a outro (quadro).

..e como posso resolver isso?

Basta chamar setVisible(true) na checkbox de diálogo Preferences , em vez de adicioná-lo.

Eu concordo em fazer os Tutoriais Swing. Você parece estar jogando código random juntos, esperando que funcione.

Você não adiciona o JDialog ao JFrame, isso não faz sentido algum, já que o método add(...) é para adicionar componentes a serem exibidos no container, não pelo container. Você exibe o JDialog do ActionListener do JBrame do JFrame. Você também não deve misturar componentes AWT (Frame) e Swing juntos sem um bom motivo.

Sua pergunta sugere que você se beneficiaria muito com os tutoriais do Swing.

O JDialog e o JFrame são contêineres de nível superior . Eu sugiro que você tenha que usar JFrame , JInternalFrame e JDesktopPane .