Tengo esta JFrame
clase de Java , en la que quiero usar un diseño de caja, pero aparece un error que dice java.awt.AWTError: BoxLayout can't be shared
. He visto a otros con este problema, pero lo resolvieron creando el diseño de cuadro en el panel de contenido, pero eso es lo que estoy haciendo aquí. Aquí está mi código:
class EditDialog extends JFrame {
JTextField title = new JTextField();
public editDialog() {
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setTitle("New entity");
getContentPane().setLayout(
new BoxLayout(this, BoxLayout.PAGE_AXIS));
add(title);
pack();
setVisible(true);
}
}
También encontré este error al hacer esto:
El JPanel aún no se ha inicializado al pasarlo al BoxLayout. Así que divide esta línea así:
Esto funcionará.
fuente
Creo que una cosa importante para resaltar de las respuestas anteriores es que el objetivo de BoxLayout (el primer parámetro) debe ser el mismo contenedor al que se llama el método setLayout como en el siguiente ejemplo:
fuente
Si está usando el diseño en un me
JFrame
gusta:El control en realidad se está agregando al,
ContentPane
por lo que parecerá que está 'compartido' entre elJFrame
y elContentPane
Haz esto en su lugar:
fuente
JFrame
s normalmente no lo requieren (a diferencia del AWTFrame
). A partir de laJFrame
documentación:As a convenience, the add, remove, and setLayout methods of this class are overridden, so that they delegate calls to the corresponding methods of the ContentPane. For example, you can add a child component to a frame as follows: frame.add(child); And the child will be added to the contentPane. The content pane will always be non-null.
Porframe
se están refiriendo a unJFrame
ejemplo.