jpanel no se muestra bien con jframe configurado en gridbaglayout

El siguiente progtwig es colocar un jpanel en la esquina superior izquierda de jframe con gridbaglayout, pero en su lugar se muestra un cuadro muy pequeño en el centro de jframe. cuando configuro el diseño de jframe en nulo, el jpanel se muestra bien. ¿Alguien puede decirme por qué el jpanel está comprimido en el centro del marco con gridbaglayout? Realmente necesito usar gridbag. por favor ayuda

import java.awt.*; import javax.swing.*; //swing package public class Major { //defining the constructor public Major() { JFrame maFrame = new JFrame("The main screen"); //creating main Jframe JPanel headPanel = new JPanel(); //creating the header panel maFrame.setSize(900, 700); //setting size maFrame.setBackground(Color.LIGHT_GRAY); //setting color of frame Container container = maFrame.getContentPane(); container.setLayout(new GridBagLayout()); //setting layout of main frame GridBagConstraints cns = new GridBagConstraints(); //creating constraint cns.gridx = 0; cns.gridy = 0; maFrame.setLocationRelativeTo(null); //centering frame headPanel.setBackground(Color.WHITE); headPanel.setSize(200, 150); container.add(headPanel, cns); maFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //setting the default close operation of JFrame maFrame.setVisible(true); //making the frame visible } //defining the main method public static void main(String[] args) { new Major(); //instantiating the class } } 

Parece que se olvidó de proporcionar restricciones de weighty , weightx y weighty a sus restricciones de GridBagConstraints , a medida que las proporcione, verá su JPanel.

Aquí he modificado tu código con esas restricciones.

Y nunca use esta línea, headPanel.setSize(200, 150); , como lo había comentado, ya que las restricciones que mencioné lo resolverán por ti.

Añadiendo un nuevo código con imagen:

  import java.awt.*; import javax.swing.*; //swing package public class Major { //defining the constructor public Major() { JFrame maFrame = new JFrame("The main screen"); //creating main Jframe JPanel headPanel = new JPanel(); //creating the header panel maFrame.setBackground(Color.LIGHT_GRAY); //setting color of frame Container container = maFrame.getContentPane(); container.setLayout(new GridBagLayout()); //setting layout of main frame GridBagConstraints cns = new GridBagConstraints(); //creating constraint cns.gridx = 0; cns.gridy = 0; //cns.gridwidth = 3; //cns.gridheight = 4; cns.weightx = 0.3; cns.weighty = 0.7; cns.anchor = GridBagConstraints.FIRST_LINE_START; cns.fill = GridBagConstraints.BOTH; maFrame.setLocationRelativeTo(null); //centering frame headPanel.setBackground(Color.WHITE); container.add(headPanel, cns); JPanel panel = new JPanel(); panel.setBackground(Color.BLUE); cns.gridx = 1; cns.gridy = 0; //cns.gridwidth = 7; //cns.gridheight = 4; cns.weightx = 0.7; cns.weighty = 0.7; cns.anchor = GridBagConstraints.PAGE_START; cns.fill = GridBagConstraints.BOTH; container.add(panel, cns); JPanel panel1 = new JPanel(); panel1.setBackground(Color.DARK_GRAY); cns.gridx = 0; cns.gridy = 1; cns.gridwidth = 2; //cns.gridheight = 4; cns.weightx = 1.0; cns.weighty = 0.3; cns.anchor = GridBagConstraints.LAST_LINE_START; cns.fill = GridBagConstraints.BOTH; container.add(panel1, cns); //JButton button = new JButton("BUTTON"); //headPanel.add(button); maFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //setting the default close operation of JFrame maFrame.pack(); maFrame.setVisible(true); //making the frame visible } //defining the main method public static void main(String[] args) { Runnable runnable = new Runnable() { public void run() { new Major(); //instantiating the class } }; SwingUtilities.invokeLater(runnable); } } 

Aquí está la salida:

GRIDBAGLAYOUT

¡Debes establecer el weighty weightx y el weighty de al menos una GridBagConstraint en algún valor mayor que 0.0!

Los atributos de peso se utilizan para indicar qué sucede con el espacio adicional si todo el diseño es más pequeño que el espacio disponible. Si todos los pesos (para una dirección) son cero, el valor predeterminado, todo el diseño se centra. Si al menos un peso es mayor que cero, el espacio adicional se distribuye a las columnas o filas en proporción a su peso, por lo que el diseño ocupará todo el espacio disponible.