I'm coding in Java Swing and for some reason, when I add two elements to a gridlayout, they both assume the same position. I have tried simplifying it into something that would not fail and then building up from there, but alas, it's still not working.
The misbehaving code within the program is:
        bodyPanelMain.setLayout(new GridLayout(4, 1, 10, 10));
        JTextArea one = new JTextArea("Hi");
        one.setLineWrap(true);
        one.setSize(100, 100);
        JTextArea two = new JTextArea("Goodbye");
        two.setLineWrap(true);
        two.setSize(100, 100);
        bodyPanelMain.add(one);
        bodyPanelMain.add(two);
        bodyPanelMain.repaint();
If I make JTextArea's width 200 and background a different color, it's clear that it's visible behind it, so it's most certainly adding all the proper elements, their positions are just wrong.
EDIT: Here's a very very short version of what I am trying to do.
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class minimessageboard extends Applet implements ActionListener {
JPanel mainPanel;
JPanel buttonPanel;
JButton announcements, websites;
JPanel bodyPanel, bodyPanelMain;
public minimessageboard() {
    this.setSize(600, 400);
    mainPanel = new JPanel(new BorderLayout());
    mainPanel.setPreferredSize(new Dimension(this.getWidth(), this.getHeight()));
    this.add(mainPanel);
    buttonPanel = new JPanel(new GridLayout(6, 1, 10, 10));
    mainPanel.add(buttonPanel, BorderLayout.WEST);
    announcements = new JButton("Announcements");
    this.formatButton(announcements);
    announcements.setActionCommand("announcements");
    buttonPanel.add(announcements);
    websites = new JButton("Websites");
    this.formatButton(websites);
    websites.setActionCommand("websites");
    buttonPanel.add(websites);
    bodyPanel = new JPanel(new BorderLayout());
    bodyPanel.setSize(200, 500);
    bodyPanel.setPreferredSize(new Dimension(200, 500));
    mainPanel.add(bodyPanel, BorderLayout.CENTER);
    bodyPanelMain = new JPanel(new BorderLayout());
    bodyPanel.add(bodyPanelMain, BorderLayout.CENTER);
    bodyPanelMain.setLayout(new GridLayout(4, 1, 10, 10));
    JButton one = new JButton("Roar");
    bodyPanelMain.add(one);
    bodyPanelMain.revalidate();
    bodyPanelMain.repaint();
}
public static void main(String args[]) {
    JFrame overall = new JFrame(); 
    overall.pack();
    overall.setVisible(true);
    overall.add(new minimessageboard());
}
public void formatButton(JButton b){
    b.setPreferredSize(new Dimension(150, 33));
    b.addActionListener(this);
}
public void actionPerformed(ActionEvent arg0) {
    String action = arg0.getActionCommand();
    bodyPanelMain.removeAll();
    if (action.equals("websites")){
        System.out.println("Fires!");
        bodyPanelMain.setLayout(new GridLayout(4, 1, 10, 10));
        JButton one = new JButton("Hi");
        JButton two = new JButton("Goodbye");
        bodyPanelMain.add(one);
        bodyPanelMain.add(two);
        bodyPanelMain.revalidate();
    }
    bodyPanelMain.repaint();
}
}
Basically, when you click on websites, "Hi" and "Bye" should show up. If I move the code within the block in the websites if statement (if (action.equals("websites")) up to the original constructor, it appears perfectly fine. The code outputs "Fires!", so I am 100% certain it gets to that part. For note, I changed it from JTextArea to JButton because I will be using JButtons, not JTextArea.
 
    