Excepción: agregar una ventana a un contenedor. ¿Cómo resolverlo?
-
29-10-2019 - |
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?
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
.