Pregunta

tengo un JDialog clase nombrada Preferences. Esta clase crea un constructor como:

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

En mi programa quiero que este diálogo de preferencias se abra mientras hago clic en un botón desde un JFrame forma. Después de registrar el oyente de la acción en el botón, escribí el código dentro como:

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

Cuando ejecuto este código obtengo la siguiente excepción (cuando hago clic en el botón):

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

¿Qué significa esto y cómo puedo resolverlo?

¿Fue útil?

Solución

Qué significa esto..

No se puede agregar un contenedor de nivel superior (diálogo) a otro (marco).

..y cómo puedo resolver esto?

Solo llama setVisible(true) sobre el Preferences diálogo, en lugar de agregarlo.

Otros consejos

No agrega el jdialog al jframe, eso no tiene sentido desde el momento desde el add(...) El método es para agregar componentes que se mostrarán en el contenedor, no por El contenedor. Muestra el JDialog del JFRame's JButton's ActionListener. Tampoco debe mezclar componentes AWT (marco) y los componentes de swing sin ninguna buena razón.

Su pregunta sugiere que se beneficiaría enormemente al pasar por los tutoriales de swing.

Jdialog y Jframe son contenedor de nivel superior. Sugiero que debas usar JFrame, JInternalFrame y JDesktopPane.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top