I am working on a GUI for a calculator. Since the GUI elements are of different sizes (e.g. I want the screen to extends all the way across the top of the GUI, while the buttons should be in a 4x4 grid below it), I have decided to use GridBagLayout. However, when I display the GUI, the screen and buttons are all in one row.

Here is a fragment of the code containing the screen and the first row of buttons:

import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.lang.*;
 
public class CalculatorGUI extends JFrame
{
    JButton button;
    JButton plus;
    JTextField screen = new JTextField("0", 15);
    //ActionListener al = new ArithmeticListener(this);
 
 
    CalculatorGUI()
    {
        setSize(350, 350);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
 
        setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
 
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.gridwidth = 4;
        add(screen);
 
        gbc.gridwidth = 1;
 
        button = new JButton("7");
        gbc.gridx = 0;
        gbc.gridy = 1;
        //button.addActionListener(al);
        add(button);
 
        button = new JButton("8");
        gbc.gridx = 1;
        gbc.gridy = 1;
        //button.addActionListener(al);
        add(button);
 
        button = new JButton("9");
        gbc.gridx = 2;
        gbc.gridy = 1;
        //button.addActionListener(al);
        add(button);
 
        button = new JButton("+");
        gbc.gridx = 3;
        gbc.gridy = 1;
        //button.addActionListener(al);
        add(button);
        }
}

I've also tried declaring and initializing the buttons and separate variables, but, when I do, the JVM throws a NullPointerException, (I assume) because it somehow reads the variable as uninitailized. I am still unsure if I am using GridBagLayout correctly and I often get confused as to how to correctly specify the location of a component in the layout, so any help would be greatly appreciated.