sirve setlayout que para fillers dividir como borderlayout java swing layout boxlayout

java - setlayout - BoxLayout no se puede compartir error



setlayout java (4)

Tengo esta clase Java JFrame , en la que quiero usar un boxlayout, 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 la caja en el panel de contenido, pero eso es lo que estoy haciendo aquí. Aquí está mi código:

class edit_dialog extends javax.swing.JFrame{ javax.swing.JTextField title = new javax.swing.JTextField(); public edit_dialog(){ setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE); setTitle("New entity"); getContentPane().setLayout( new javax.swing.BoxLayout(this, javax.swing.BoxLayout.PAGE_AXIS)); add(title); pack(); setVisible(true); } }


Creo que una cosa importante a destacar de las respuestas anteriores es que el objetivo de BoxLayout (el primer parámetro) debe ser el mismo contenedor al que se está llamando el método setLayout como en el siguiente ejemplo:

JPanel XXXXXXXXX = new JPanel(); XXXXXXXXX.setLayout(new BoxLayout(XXXXXXXXX, BoxLayout.Y_AXIS));


Si está utilizando el diseño en un JFrame como:

JFrame frame = new JFrame(); frame.setLayout(new BoxLayout(frame, BoxLayout.Y_AXIS)); frame.add(new JLabel("Hello World!"));

El control se está agregando al ContentPane por lo que se verá como "compartido" entre JFrame y ContentPane

Haz esto en su lugar:

JFrame frame = new JFrame(); frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS)); frame.add(new JLabel("Hello World!"));


Su problema es que está creando un BoxLayout para un JFrame ( this ), pero configurándolo como el diseño de un JPanel ( getContentPane() ). Tratar:

getContentPane().setLayout( new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS) );


También encontré este error al hacer esto:

JPanel panel = new JPanel(new BoxLayout(panel, BoxLayout.PAGE_AXIS));

El JPanel aún no se ha inicializado al pasarlo a BoxLayout. Así que divida esta línea así:

JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));

Esto funcionará